You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by th...@apache.org on 2020/01/08 06:02:47 UTC

svn commit: r37517 [49/50] - in /dev/commons/dbutils/1.8-RC2: ./ binaries/ site/ site/apidocs/ site/apidocs/jquery/ site/apidocs/jquery/external/ site/apidocs/jquery/external/jquery/ site/apidocs/jquery/images/ site/apidocs/jquery/jszip-utils/ site/api...

Added: dev/commons/dbutils/1.8-RC2/site/jacoco/org.apache.commons.dbutils/QueryRunner.html
==============================================================================
--- dev/commons/dbutils/1.8-RC2/site/jacoco/org.apache.commons.dbutils/QueryRunner.html (added)
+++ dev/commons/dbutils/1.8-RC2/site/jacoco/org.apache.commons.dbutils/QueryRunner.html Wed Jan  8 06:02:46 2020
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>QueryRunner</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Apache Commons DbUtils</a> &gt; <a href="index.html" class="el_package">org.apache.commons.dbutils</a> &gt; <span class="el_class">QueryRunner</span></div><h1>QueryRunner</h1><table class="coverage" cellspacing="0" id="coveragetable"><t
 head><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">199 of 909</td><td class="ctr2">78%</td><td class="bar">29 of 100</td><td class="ctr2">71%</td><td class="ctr1">35</td><td class="ctr2">91
 </td><td class="ctr1">40</td><td class="ctr2">233</td><td class="ctr1">10</td><td class="ctr2">41</td></tr></tfoot><tbody><tr><td id="a9"><a href="QueryRunner.java.html#L635" class="el_method">insert(Connection, boolean, String, ResultSetHandler, Object[])</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="39" alt="39"/><img src="../jacoco-resources/greenbar.gif" width="61" height="10" title="47" alt="47"/></td><td class="ctr2" id="c30">54%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="75" height="10" title="10" alt="10"/><img src="../jacoco-resources/greenbar.gif" width="45" height="10" title="6" alt="6"/></td><td class="ctr2" id="e7">37%</td><td class="ctr1" id="f0">8</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">11</td><td class="ctr2" id="i2">28</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a14"><a href="QueryRunner.java.html#L730" class="el_met
 hod">insertBatch(Connection, boolean, String, ResultSetHandler, Object[][])</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="42" height="10" title="32" alt="32"/><img src="../jacoco-resources/greenbar.gif" width="76" height="10" title="58" alt="58"/></td><td class="ctr2" id="c29">64%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="8" alt="8"/><img src="../jacoco-resources/greenbar.gif" width="45" height="10" title="6" alt="6"/></td><td class="ctr2" id="e6">42%</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g2">8</td><td class="ctr1" id="h1">9</td><td class="ctr2" id="i3">25</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a22"><a href="QueryRunner.java.html#L285" class="el_method">query(String, Object, ResultSetHandler)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="23" height="10" title="18" alt="18"/></td><td class="ctr2"
  id="c31">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i8">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a12"><a href="QueryRunner.java.html#L565" class="el_method">insert(String, ResultSetHandler)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="14" alt="14"/></td><td class="ctr2" id="c32">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i9">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a18"><a href="QueryRunner.java.html#L220" class="el_method">query(Connection, String, Object, ResultSetHandler)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="17" height="10" 
 title="13" alt="13"/></td><td class="ctr2" id="c33">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i28">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a23"><a href="QueryRunner.java.html#L308" class="el_method">query(String, Object[], ResultSetHandler)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="13" alt="13"/></td><td class="ctr2" id="c34">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i10">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a10"><a href="QueryRunner.java.html#L602" class="el_method">insert(Connection, String, ResultSetHandler)</a></td><td class="bar" id="b6"><img src="../
 jacoco-resources/redbar.gif" width="11" height="10" title="9" alt="9"/></td><td class="ctr2" id="c35">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i29">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a19"><a href="QueryRunner.java.html#L237" class="el_method">query(Connection, String, Object[], ResultSetHandler)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="8" alt="8"/></td><td class="ctr2" id="c36">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i30">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a11"><a href="QueryRunner.java.html#L618" class="el_method">insert(Connection, String, R
 esultSetHandler, Object[])</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="8" alt="8"/></td><td class="ctr2" id="c37">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i31">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a15"><a href="QueryRunner.java.html#L713" class="el_method">insertBatch(Connection, String, ResultSetHandler, Object[][])</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="8" alt="8"/></td><td class="ctr2" id="c38">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i32">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a0"><a
  href="QueryRunner.java.html#L165" class="el_method">batch(Connection, boolean, String, Object[][])</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="6" alt="6"/><img src="../jacoco-resources/greenbar.gif" width="100" height="10" title="76" alt="76"/></td><td class="ctr2" id="c26">92%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="2" alt="2"/><img src="../jacoco-resources/greenbar.gif" width="90" height="10" title="12" alt="12"/></td><td class="ctr2" id="e1">85%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">8</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i4">23</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a30"><a href="QueryRunner.java.html#L116" class="el_method">QueryRunner(DataSource, boolean, StatementConfiguration)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="7" height="10
 " title="6" alt="6"/></td><td class="ctr2" id="c39">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h5">2</td><td class="ctr2" id="i11">2</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a17"><a href="QueryRunner.java.html#L362" class="el_method">query(Connection, boolean, String, ResultSetHandler, Object[])</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="5" alt="5"/><img src="../jacoco-resources/greenbar.gif" width="113" height="10" title="86" alt="86"/></td><td class="ctr2" id="c24">94%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="97" height="10" title="13" alt="13"/></td><td class="ctr2" id="e5">81%</td><td class="ctr1" id="f2">3</td><td class="ctr2" id="g1">9</td><td clas
 s="ctr1" id="h13">1</td><td class="ctr2" id="i0">29</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a4"><a href="QueryRunner.java.html#L936" class="el_method">execute(Connection, boolean, String, ResultSetHandler, Object[])</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="5" alt="5"/><img src="../jacoco-resources/greenbar.gif" width="113" height="10" title="86" alt="86"/></td><td class="ctr2" id="c25">94%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="2" alt="2"/><img src="../jacoco-resources/greenbar.gif" width="90" height="10" title="12" alt="12"/></td><td class="ctr2" id="e2">85%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">8</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i1">29</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a34"><a href="QueryRunner.java.html#L514" class="el
 _method">update(Connection, boolean, String, Object[])</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="5" alt="5"/><img src="../jacoco-resources/greenbar.gif" width="80" height="10" title="61" alt="61"/></td><td class="ctr2" id="c27">92%</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="2" alt="2"/><img src="../jacoco-resources/greenbar.gif" width="75" height="10" title="10" alt="10"/></td><td class="ctr2" id="e3">83%</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">7</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i5">22</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a3"><a href="QueryRunner.java.html#L889" class="el_method">execute(Connection, boolean, String, Object[])</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="5" alt="5"/><img src="../jacoco-resources/greenb
 ar.gif" width="69" height="10" title="53" alt="53"/></td><td class="ctr2" id="c28">91%</td><td class="bar" id="d6"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="52" height="10" title="7" alt="7"/></td><td class="ctr2" id="e0">87%</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g6">5</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i6">19</td><td class="ctr1" id="j16">0</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a31"><a href="QueryRunner.java.html#L101" class="el_method">QueryRunner(DataSource, StatementConfiguration)</a></td><td class="bar" id="b16"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="c40">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h6">2</td><td class="ctr2" id="i12">2</td><td class="ctr1" i
 d="j9">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a33"><a href="QueryRunner.java.html#L999" class="el_method">retrieveOutParameters(CallableStatement, Object[])</a></td><td class="bar" id="b17"><img src="../jacoco-resources/greenbar.gif" width="32" height="10" title="25" alt="25"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d7"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="37" height="10" title="5" alt="5"/></td><td class="ctr2" id="e4">83%</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g7">4</td><td class="ctr1" id="h17">0</td><td class="ctr2" id="i7">5</td><td class="ctr1" id="j17">0</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a39"><a href="QueryRunner.java.html#L480" class="el_method">update(String, Object)</a></td><td class="bar" id="b18"><img src="../jacoco-resources/greenbar.gif" width="22" height="10" title="17" alt="17"/></td><td class="ctr2" 
 id="c1">100%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">0</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">0</td><td class="ctr2" id="i13">2</td><td class="ctr1" id="j18">0</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a24"><a href="QueryRunner.java.html#L345" class="el_method">query(String, ResultSetHandler)</a></td><td class="bar" id="b19"><img src="../jacoco-resources/greenbar.gif" width="18" height="10" title="14" alt="14"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">0</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">0</td><td class="ctr2" id="i14">2</td><td class="ctr1" id="j19">0</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a25"><a href="QueryRunner.java.html#L327" class="el_method">query(String, ResultSetHandler, Object[])</a></td><td class="bar" id="b20"><img src="../jacoco-resources/greenbar.gif" width="17" 
 height="10" title="13" alt="13"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">0</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">0</td><td class="ctr2" id="i15">2</td><td class="ctr1" id="j20">0</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a38"><a href="QueryRunner.java.html#L462" class="el_method">update(String)</a></td><td class="bar" id="b21"><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="13" alt="13"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">0</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h21">0</td><td class="ctr2" id="i16">2</td><td class="ctr1" id="j21">0</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a13"><a href="QueryRunner.java.html#L585" class="el_method">insert(String, ResultSetHandler, Object[])</a></td><td class="bar" id="b22"><img src="../jac
 oco-resources/greenbar.gif" width="17" height="10" title="13" alt="13"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f22">0</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h22">0</td><td class="ctr2" id="i17">2</td><td class="ctr1" id="j22">0</td><td class="ctr2" id="k22">1</td></tr><tr><td id="a16"><a href="QueryRunner.java.html#L695" class="el_method">insertBatch(String, ResultSetHandler, Object[][])</a></td><td class="bar" id="b23"><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="13" alt="13"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">n/a</td><td class="ctr1" id="f23">0</td><td class="ctr2" id="g23">1</td><td class="ctr1" id="h23">0</td><td class="ctr2" id="i18">2</td><td class="ctr1" id="j23">0</td><td class="ctr2" id="k23">1</td></tr><tr><td id="a8"><a href="QueryRunner.java.html#L872" class="el_method">execute(String, Res
 ultSetHandler, Object[])</a></td><td class="bar" id="b24"><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="13" alt="13"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d24"/><td class="ctr2" id="e24">n/a</td><td class="ctr1" id="f24">0</td><td class="ctr2" id="g24">1</td><td class="ctr1" id="h24">0</td><td class="ctr2" id="i19">2</td><td class="ctr1" id="j24">0</td><td class="ctr2" id="k24">1</td></tr><tr><td id="a2"><a href="QueryRunner.java.html#L149" class="el_method">batch(String, Object[][])</a></td><td class="bar" id="b25"><img src="../jacoco-resources/greenbar.gif" width="15" height="10" title="12" alt="12"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d25"/><td class="ctr2" id="e25">n/a</td><td class="ctr1" id="f25">0</td><td class="ctr2" id="g25">1</td><td class="ctr1" id="h25">0</td><td class="ctr2" id="i20">2</td><td class="ctr1" id="j25">0</td><td class="ctr2" id="k25">1</td></tr><tr><td id="a36"><a href="QueryRunner.jav
 a.html#L434" class="el_method">update(Connection, String, Object)</a></td><td class="bar" id="b26"><img src="../jacoco-resources/greenbar.gif" width="15" height="10" title="12" alt="12"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d26"/><td class="ctr2" id="e26">n/a</td><td class="ctr1" id="f26">0</td><td class="ctr2" id="g26">1</td><td class="ctr1" id="h26">0</td><td class="ctr2" id="i33">1</td><td class="ctr1" id="j26">0</td><td class="ctr2" id="k26">1</td></tr><tr><td id="a40"><a href="QueryRunner.java.html#L498" class="el_method">update(String, Object[])</a></td><td class="bar" id="b27"><img src="../jacoco-resources/greenbar.gif" width="15" height="10" title="12" alt="12"/></td><td class="ctr2" id="c10">100%</td><td class="bar" id="d27"/><td class="ctr2" id="e27">n/a</td><td class="ctr1" id="f27">0</td><td class="ctr2" id="g27">1</td><td class="ctr1" id="h27">0</td><td class="ctr2" id="i21">2</td><td class="ctr1" id="j27">0</td><td class="ctr2" id="k27">1</td></tr
 ><tr><td id="a7"><a href="QueryRunner.java.html#L819" class="el_method">execute(String, Object[])</a></td><td class="bar" id="b28"><img src="../jacoco-resources/greenbar.gif" width="15" height="10" title="12" alt="12"/></td><td class="ctr2" id="c11">100%</td><td class="bar" id="d28"/><td class="ctr2" id="e28">n/a</td><td class="ctr1" id="f28">0</td><td class="ctr2" id="g28">1</td><td class="ctr1" id="h28">0</td><td class="ctr2" id="i22">2</td><td class="ctr1" id="j28">0</td><td class="ctr2" id="k28">1</td></tr><tr><td id="a20"><a href="QueryRunner.java.html#L266" class="el_method">query(Connection, String, ResultSetHandler)</a></td><td class="bar" id="b29"><img src="../jacoco-resources/greenbar.gif" width="11" height="10" title="9" alt="9"/></td><td class="ctr2" id="c12">100%</td><td class="bar" id="d29"/><td class="ctr2" id="e29">n/a</td><td class="ctr1" id="f29">0</td><td class="ctr2" id="g29">1</td><td class="ctr1" id="h29">0</td><td class="ctr2" id="i34">1</td><td class="ctr1" i
 d="j29">0</td><td class="ctr2" id="k29">1</td></tr><tr><td id="a21"><a href="QueryRunner.java.html#L252" class="el_method">query(Connection, String, ResultSetHandler, Object[])</a></td><td class="bar" id="b30"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="8" alt="8"/></td><td class="ctr2" id="c13">100%</td><td class="bar" id="d30"/><td class="ctr2" id="e30">n/a</td><td class="ctr1" id="f30">0</td><td class="ctr2" id="g30">1</td><td class="ctr1" id="h30">0</td><td class="ctr2" id="i35">1</td><td class="ctr1" id="j30">0</td><td class="ctr2" id="k30">1</td></tr><tr><td id="a35"><a href="QueryRunner.java.html#L420" class="el_method">update(Connection, String)</a></td><td class="bar" id="b31"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="8" alt="8"/></td><td class="ctr2" id="c14">100%</td><td class="bar" id="d31"/><td class="ctr2" id="e31">n/a</td><td class="ctr1" id="f31">0</td><td class="ctr2" id="g31">1</td><td class="ctr1" id="h
 31">0</td><td class="ctr2" id="i36">1</td><td class="ctr1" id="j31">0</td><td class="ctr2" id="k31">1</td></tr><tr><td id="a6"><a href="QueryRunner.java.html#L847" class="el_method">execute(Connection, String, ResultSetHandler, Object[])</a></td><td class="bar" id="b32"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="8" alt="8"/></td><td class="ctr2" id="c15">100%</td><td class="bar" id="d32"/><td class="ctr2" id="e32">n/a</td><td class="ctr1" id="f32">0</td><td class="ctr2" id="g32">1</td><td class="ctr1" id="h32">0</td><td class="ctr2" id="i37">1</td><td class="ctr1" id="j32">0</td><td class="ctr2" id="k32">1</td></tr><tr><td id="a1"><a href="QueryRunner.java.html#L132" class="el_method">batch(Connection, String, Object[][])</a></td><td class="bar" id="b33"><img src="../jacoco-resources/greenbar.gif" width="9" height="10" title="7" alt="7"/></td><td class="ctr2" id="c16">100%</td><td class="bar" id="d33"/><td class="ctr2" id="e33">n/a</td><td class="ctr1"
  id="f33">0</td><td class="ctr2" id="g33">1</td><td class="ctr1" id="h33">0</td><td class="ctr2" id="i38">1</td><td class="ctr1" id="j33">0</td><td class="ctr2" id="k33">1</td></tr><tr><td id="a37"><a href="QueryRunner.java.html#L447" class="el_method">update(Connection, String, Object[])</a></td><td class="bar" id="b34"><img src="../jacoco-resources/greenbar.gif" width="9" height="10" title="7" alt="7"/></td><td class="ctr2" id="c17">100%</td><td class="bar" id="d34"/><td class="ctr2" id="e34">n/a</td><td class="ctr1" id="f34">0</td><td class="ctr2" id="g34">1</td><td class="ctr1" id="h34">0</td><td class="ctr2" id="i39">1</td><td class="ctr1" id="j34">0</td><td class="ctr2" id="k34">1</td></tr><tr><td id="a5"><a href="QueryRunner.java.html#L793" class="el_method">execute(Connection, String, Object[])</a></td><td class="bar" id="b35"><img src="../jacoco-resources/greenbar.gif" width="9" height="10" title="7" alt="7"/></td><td class="ctr2" id="c18">100%</td><td class="bar" id="d35"/
 ><td class="ctr2" id="e35">n/a</td><td class="ctr1" id="f35">0</td><td class="ctr2" id="g35">1</td><td class="ctr1" id="h35">0</td><td class="ctr2" id="i40">1</td><td class="ctr1" id="j35">0</td><td class="ctr2" id="k35">1</td></tr><tr><td id="a29"><a href="QueryRunner.java.html#L88" class="el_method">QueryRunner(DataSource, boolean)</a></td><td class="bar" id="b36"><img src="../jacoco-resources/greenbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="c19">100%</td><td class="bar" id="d36"/><td class="ctr2" id="e36">n/a</td><td class="ctr1" id="f36">0</td><td class="ctr2" id="g36">1</td><td class="ctr1" id="h36">0</td><td class="ctr2" id="i23">2</td><td class="ctr1" id="j36">0</td><td class="ctr2" id="k36">1</td></tr><tr><td id="a27"><a href="QueryRunner.java.html#L52" class="el_method">QueryRunner(boolean)</a></td><td class="bar" id="b37"><img src="../jacoco-resources/greenbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c20">100%<
 /td><td class="bar" id="d37"/><td class="ctr2" id="e37">n/a</td><td class="ctr1" id="f37">0</td><td class="ctr2" id="g37">1</td><td class="ctr1" id="h37">0</td><td class="ctr2" id="i24">2</td><td class="ctr1" id="j37">0</td><td class="ctr2" id="k37">1</td></tr><tr><td id="a28"><a href="QueryRunner.java.html#L64" class="el_method">QueryRunner(DataSource)</a></td><td class="bar" id="b38"><img src="../jacoco-resources/greenbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c21">100%</td><td class="bar" id="d38"/><td class="ctr2" id="e38">n/a</td><td class="ctr1" id="f38">0</td><td class="ctr2" id="g38">1</td><td class="ctr1" id="h38">0</td><td class="ctr2" id="i25">2</td><td class="ctr1" id="j38">0</td><td class="ctr2" id="k38">1</td></tr><tr><td id="a32"><a href="QueryRunner.java.html#L74" class="el_method">QueryRunner(StatementConfiguration)</a></td><td class="bar" id="b39"><img src="../jacoco-resources/greenbar.gif" width="5" height="10" title="4" alt="4"/><
 /td><td class="ctr2" id="c22">100%</td><td class="bar" id="d39"/><td class="ctr2" id="e39">n/a</td><td class="ctr1" id="f39">0</td><td class="ctr2" id="g39">1</td><td class="ctr1" id="h39">0</td><td class="ctr2" id="i26">2</td><td class="ctr1" id="j39">0</td><td class="ctr2" id="k39">1</td></tr><tr><td id="a26"><a href="QueryRunner.java.html#L41" class="el_method">QueryRunner()</a></td><td class="bar" id="b40"><img src="../jacoco-resources/greenbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c23">100%</td><td class="bar" id="d40"/><td class="ctr2" id="e40">n/a</td><td class="ctr1" id="f40">0</td><td class="ctr2" id="g40">1</td><td class="ctr1" id="h40">0</td><td class="ctr2" id="i27">2</td><td class="ctr1" id="j40">0</td><td class="ctr2" id="k40">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.5.201910111838</span></div></body></html>
\ No newline at end of file

Added: dev/commons/dbutils/1.8-RC2/site/jacoco/org.apache.commons.dbutils/QueryRunner.java.html
==============================================================================
--- dev/commons/dbutils/1.8-RC2/site/jacoco/org.apache.commons.dbutils/QueryRunner.java.html (added)
+++ dev/commons/dbutils/1.8-RC2/site/jacoco/org.apache.commons.dbutils/QueryRunner.java.html Wed Jan  8 06:02:46 2020
@@ -0,0 +1,1008 @@
+<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>QueryRunner.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Apache Commons DbUtils</a> &gt; <a href="index.source.html" class="el_package">org.apache.commons.dbutils</a> &gt; <span class="el_sourc
 e">QueryRunner.java</span></div><h1>QueryRunner.java</h1><pre class="source lang-java linenums">/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the &quot;License&quot;); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.dbutils;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.LinkedList;
+import java.util.List;
+import javax.sql.DataSource;
+
+/**
+ * Executes SQL queries with pluggable strategies for handling
+ * {@code ResultSet}s.  This class is thread safe.
+ *
+ * @see ResultSetHandler
+ */
+public class QueryRunner extends AbstractQueryRunner {
+
+    /**
+     * Constructor for QueryRunner.
+     */
+    public QueryRunner() {
+<span class="fc" id="L41">        super();</span>
+<span class="fc" id="L42">    }</span>
+
+    /**
+     * Constructor for QueryRunner that controls the use of {@code ParameterMetaData}.
+     *
+     * @param pmdKnownBroken Some drivers don't support {@link java.sql.ParameterMetaData#getParameterType(int) };
+     * if {@code pmdKnownBroken} is set to true, we won't even try it; if false, we'll try it,
+     * and if it breaks, we'll remember not to use it again.
+     */
+    public QueryRunner(final boolean pmdKnownBroken) {
+<span class="fc" id="L52">        super(pmdKnownBroken);</span>
+<span class="fc" id="L53">    }</span>
+
+    /**
+     * Constructor for QueryRunner that takes a {@code DataSource} to use.
+     *
+     * Methods that do not take a {@code Connection} parameter will retrieve connections from this
+     * {@code DataSource}.
+     *
+     * @param ds The {@code DataSource} to retrieve connections from.
+     */
+    public QueryRunner(final DataSource ds) {
+<span class="fc" id="L64">        super(ds);</span>
+<span class="fc" id="L65">    }</span>
+
+    /**
+     * Constructor for QueryRunner that takes a {@code StatementConfiguration} to configure statements when
+     * preparing them.
+     *
+     * @param stmtConfig The configuration to apply to statements when they are prepared.
+     */
+    public QueryRunner(final StatementConfiguration stmtConfig) {
+<span class="fc" id="L74">        super(stmtConfig);</span>
+<span class="fc" id="L75">    }</span>
+
+    /**
+     * Constructor for QueryRunner that takes a {@code DataSource} and controls the use of {@code ParameterMetaData}.
+     * Methods that do not take a {@code Connection} parameter will retrieve connections from this
+     * {@code DataSource}.
+     *
+     * @param ds The {@code DataSource} to retrieve connections from.
+     * @param pmdKnownBroken Some drivers don't support {@link java.sql.ParameterMetaData#getParameterType(int) };
+     * if {@code pmdKnownBroken} is set to true, we won't even try it; if false, we'll try it,
+     * and if it breaks, we'll remember not to use it again.
+     */
+    public QueryRunner(final DataSource ds, final boolean pmdKnownBroken) {
+<span class="fc" id="L88">        super(ds, pmdKnownBroken);</span>
+<span class="fc" id="L89">    }</span>
+
+    /**
+     * Constructor for QueryRunner that takes a {@code DataSource} to use and a {@code StatementConfiguration}.
+     *
+     * Methods that do not take a {@code Connection} parameter will retrieve connections from this
+     * {@code DataSource}.
+     *
+     * @param ds The {@code DataSource} to retrieve connections from.
+     * @param stmtConfig The configuration to apply to statements when they are prepared.
+     */
+    public QueryRunner(final DataSource ds, final StatementConfiguration stmtConfig) {
+<span class="nc" id="L101">        super(ds, stmtConfig);</span>
+<span class="nc" id="L102">    }</span>
+
+    /**
+     * Constructor for QueryRunner that takes a {@code DataSource}, a {@code StatementConfiguration}, and
+     * controls the use of {@code ParameterMetaData}.  Methods that do not take a {@code Connection} parameter
+     * will retrieve connections from this {@code DataSource}.
+     *
+     * @param ds The {@code DataSource} to retrieve connections from.
+     * @param pmdKnownBroken Some drivers don't support {@link java.sql.ParameterMetaData#getParameterType(int) };
+     * if {@code pmdKnownBroken} is set to true, we won't even try it; if false, we'll try it,
+     * and if it breaks, we'll remember not to use it again.
+     * @param stmtConfig The configuration to apply to statements when they are prepared.
+     */
+    public QueryRunner(final DataSource ds, final boolean pmdKnownBroken, final StatementConfiguration stmtConfig) {
+<span class="nc" id="L116">        super(ds, pmdKnownBroken, stmtConfig);</span>
+<span class="nc" id="L117">    }</span>
+
+    /**
+     * Execute a batch of SQL INSERT, UPDATE, or DELETE queries.
+     *
+     * @param conn The Connection to use to run the query.  The caller is
+     * responsible for closing this Connection.
+     * @param sql The SQL to execute.
+     * @param params An array of query replacement parameters.  Each row in
+     * this array is one set of batch replacement values.
+     * @return The number of rows updated per statement.
+     * @throws SQLException if a database access error occurs
+     * @since DbUtils 1.1
+     */
+    public int[] batch(final Connection conn, final String sql, final Object[][] params) throws SQLException {
+<span class="fc" id="L132">        return this.batch(conn, false, sql, params);</span>
+    }
+
+    /**
+     * Execute a batch of SQL INSERT, UPDATE, or DELETE queries.  The
+     * {@code Connection} is retrieved from the {@code DataSource}
+     * set in the constructor.  This {@code Connection} must be in
+     * auto-commit mode or the update will not be saved.
+     *
+     * @param sql The SQL to execute.
+     * @param params An array of query replacement parameters.  Each row in
+     * this array is one set of batch replacement values.
+     * @return The number of rows updated per statement.
+     * @throws SQLException if a database access error occurs
+     * @since DbUtils 1.1
+     */
+    public int[] batch(final String sql, final Object[][] params) throws SQLException {
+<span class="fc" id="L149">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="fc" id="L150">            return this.batch(conn, true, sql, params);</span>
+        }
+    }
+
+    /**
+     * Calls update after checking the parameters to ensure nothing is null.
+     * @param conn The connection to use for the batch call.
+     * @param closeConn True if the connection should be closed, false otherwise.
+     * @param sql The SQL statement to execute.
+     * @param params An array of query replacement parameters.  Each row in
+     * this array is one set of batch replacement values.
+     * @return The number of rows updated in the batch.
+     * @throws SQLException If there are database or parameter errors.
+     */
+    private int[] batch(final Connection conn, final boolean closeConn, final String sql, final Object[][] params) throws SQLException {
+<span class="fc bfc" id="L165" title="All 2 branches covered.">        if (conn == null) {</span>
+<span class="fc" id="L166">            throw new SQLException(&quot;Null connection&quot;);</span>
+        }
+
+<span class="fc bfc" id="L169" title="All 2 branches covered.">        if (sql == null) {</span>
+<span class="pc bpc" id="L170" title="1 of 2 branches missed.">            if (closeConn) {</span>
+<span class="fc" id="L171">                close(conn);</span>
+            }
+<span class="fc" id="L173">            throw new SQLException(&quot;Null SQL statement&quot;);</span>
+        }
+
+<span class="fc bfc" id="L176" title="All 2 branches covered.">        if (params == null) {</span>
+<span class="pc bpc" id="L177" title="1 of 2 branches missed.">            if (closeConn) {</span>
+<span class="fc" id="L178">                close(conn);</span>
+            }
+<span class="fc" id="L180">            throw new SQLException(&quot;Null parameters. If parameters aren't need, pass an empty array.&quot;);</span>
+        }
+
+<span class="fc" id="L183">        PreparedStatement stmt = null;</span>
+<span class="fc" id="L184">        int[] rows = null;</span>
+        try {
+<span class="fc" id="L186">            stmt = this.prepareStatement(conn, sql);</span>
+
+<span class="fc bfc" id="L188" title="All 2 branches covered.">            for (Object[] param : params) {</span>
+<span class="fc" id="L189">                this.fillStatement(stmt, param);</span>
+<span class="fc" id="L190">                stmt.addBatch();</span>
+            }
+<span class="fc" id="L192">            rows = stmt.executeBatch();</span>
+
+<span class="fc" id="L194">        } catch (final SQLException e) {</span>
+<span class="nc" id="L195">            this.rethrow(e, sql, (Object[])params);</span>
+        } finally {
+<span class="fc" id="L197">            close(stmt);</span>
+<span class="fc bfc" id="L198" title="All 2 branches covered.">            if (closeConn) {</span>
+<span class="fc" id="L199">                close(conn);</span>
+            }
+        }
+
+<span class="fc" id="L203">        return rows;</span>
+    }
+
+    /**
+     * Execute an SQL SELECT query with a single replacement parameter. The
+     * caller is responsible for closing the connection.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param conn The connection to execute the query in.
+     * @param sql The query to execute.
+     * @param param The replacement parameter.
+     * @param rsh The handler that converts the results into an object.
+     * @return The object returned by the handler.
+     * @throws SQLException if a database access error occurs
+     * @deprecated Use {@link #query(Connection, String, ResultSetHandler, Object...)}
+     */
+    @Deprecated
+    public &lt;T&gt; T query(final Connection conn, final String sql, final Object param, final ResultSetHandler&lt;T&gt; rsh) throws SQLException {
+<span class="nc" id="L220">        return this.&lt;T&gt;query(conn, false, sql, rsh, param);</span>
+    }
+
+    /**
+     * Execute an SQL SELECT query with replacement parameters.  The
+     * caller is responsible for closing the connection.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param conn The connection to execute the query in.
+     * @param sql The query to execute.
+     * @param params The replacement parameters.
+     * @param rsh The handler that converts the results into an object.
+     * @return The object returned by the handler.
+     * @throws SQLException if a database access error occurs
+     * @deprecated Use {@link #query(Connection,String,ResultSetHandler,Object...)} instead
+     */
+    @Deprecated
+    public &lt;T&gt; T query(final Connection conn, final String sql, final Object[] params, final ResultSetHandler&lt;T&gt; rsh) throws SQLException {
+<span class="nc" id="L237">        return this.&lt;T&gt;query(conn, false, sql, rsh, params);</span>
+    }
+
+    /**
+     * Execute an SQL SELECT query with replacement parameters.  The
+     * caller is responsible for closing the connection.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param conn The connection to execute the query in.
+     * @param sql The query to execute.
+     * @param rsh The handler that converts the results into an object.
+     * @param params The replacement parameters.
+     * @return The object returned by the handler.
+     * @throws SQLException if a database access error occurs
+     */
+    public &lt;T&gt; T query(final Connection conn, final String sql, final ResultSetHandler&lt;T&gt; rsh, final Object... params) throws SQLException {
+<span class="fc" id="L252">        return this.&lt;T&gt;query(conn, false, sql, rsh, params);</span>
+    }
+
+    /**
+     * Execute an SQL SELECT query without any replacement parameters.  The
+     * caller is responsible for closing the connection.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param conn The connection to execute the query in.
+     * @param sql The query to execute.
+     * @param rsh The handler that converts the results into an object.
+     * @return The object returned by the handler.
+     * @throws SQLException if a database access error occurs
+     */
+    public &lt;T&gt; T query(final Connection conn, final String sql, final ResultSetHandler&lt;T&gt; rsh) throws SQLException {
+<span class="fc" id="L266">        return this.&lt;T&gt;query(conn, false, sql, rsh, (Object[]) null);</span>
+    }
+
+    /**
+     * Executes the given SELECT SQL with a single replacement parameter.
+     * The {@code Connection} is retrieved from the
+     * {@code DataSource} set in the constructor.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param sql The SQL statement to execute.
+     * @param param The replacement parameter.
+     * @param rsh The handler used to create the result object from
+     * the {@code ResultSet}.
+     *
+     * @return An object generated by the handler.
+     * @throws SQLException if a database access error occurs
+     * @deprecated Use {@link #query(String, ResultSetHandler, Object...)}
+     */
+    @Deprecated
+    public &lt;T&gt; T query(final String sql, final Object param, final ResultSetHandler&lt;T&gt; rsh) throws SQLException {
+<span class="nc" id="L285">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="nc" id="L286">            return this.&lt;T&gt;query(conn, true, sql, rsh, param);</span>
+        }
+    }
+
+    /**
+     * Executes the given SELECT SQL query and returns a result object.
+     * The {@code Connection} is retrieved from the
+     * {@code DataSource} set in the constructor.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param sql The SQL statement to execute.
+     * @param params Initialize the PreparedStatement's IN parameters with
+     * this array.
+     *
+     * @param rsh The handler used to create the result object from
+     * the {@code ResultSet}.
+     *
+     * @return An object generated by the handler.
+     * @throws SQLException if a database access error occurs
+     * @deprecated Use {@link #query(String, ResultSetHandler, Object...)}
+     */
+    @Deprecated
+    public &lt;T&gt; T query(final String sql, final Object[] params, final ResultSetHandler&lt;T&gt; rsh) throws SQLException {
+<span class="nc" id="L308">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="nc" id="L309">            return this.&lt;T&gt;query(conn, true, sql, rsh, params);</span>
+        }
+    }
+
+    /**
+     * Executes the given SELECT SQL query and returns a result object.
+     * The {@code Connection} is retrieved from the
+     * {@code DataSource} set in the constructor.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param sql The SQL statement to execute.
+     * @param rsh The handler used to create the result object from
+     * the {@code ResultSet}.
+     * @param params Initialize the PreparedStatement's IN parameters with
+     * this array.
+     * @return An object generated by the handler.
+     * @throws SQLException if a database access error occurs
+     */
+    public &lt;T&gt; T query(final String sql, final ResultSetHandler&lt;T&gt; rsh, final Object... params) throws SQLException {
+<span class="fc" id="L327">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="fc" id="L328">            return this.&lt;T&gt;query(conn, true, sql, rsh, params);</span>
+        }
+    }
+
+    /**
+     * Executes the given SELECT SQL without any replacement parameters.
+     * The {@code Connection} is retrieved from the
+     * {@code DataSource} set in the constructor.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param sql The SQL statement to execute.
+     * @param rsh The handler used to create the result object from
+     * the {@code ResultSet}.
+     *
+     * @return An object generated by the handler.
+     * @throws SQLException if a database access error occurs
+     */
+    public &lt;T&gt; T query(final String sql, final ResultSetHandler&lt;T&gt; rsh) throws SQLException {
+<span class="fc" id="L345">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="fc" id="L346">            return this.&lt;T&gt;query(conn, true, sql, rsh, (Object[]) null);</span>
+        }
+    }
+
+    /**
+     * Calls query after checking the parameters to ensure nothing is null.
+     * @param conn The connection to use for the query call.
+     * @param closeConn True if the connection should be closed, false otherwise.
+     * @param sql The SQL statement to execute.
+     * @param params An array of query replacement parameters.  Each row in
+     * this array is one set of batch replacement values.
+     * @return The results of the query.
+     * @throws SQLException If there are database or parameter errors.
+     */
+    private &lt;T&gt; T query(final Connection conn, final boolean closeConn, final String sql, final ResultSetHandler&lt;T&gt; rsh, final Object... params)
+            throws SQLException {
+<span class="fc bfc" id="L362" title="All 2 branches covered.">        if (conn == null) {</span>
+<span class="fc" id="L363">            throw new SQLException(&quot;Null connection&quot;);</span>
+        }
+
+<span class="fc bfc" id="L366" title="All 2 branches covered.">        if (sql == null) {</span>
+<span class="pc bpc" id="L367" title="1 of 2 branches missed.">            if (closeConn) {</span>
+<span class="fc" id="L368">                close(conn);</span>
+            }
+<span class="fc" id="L370">            throw new SQLException(&quot;Null SQL statement&quot;);</span>
+        }
+
+<span class="fc bfc" id="L373" title="All 2 branches covered.">        if (rsh == null) {</span>
+<span class="pc bpc" id="L374" title="1 of 2 branches missed.">            if (closeConn) {</span>
+<span class="fc" id="L375">                close(conn);</span>
+            }
+<span class="fc" id="L377">            throw new SQLException(&quot;Null ResultSetHandler&quot;);</span>
+        }
+
+<span class="fc" id="L380">        Statement stmt = null;</span>
+<span class="fc" id="L381">        ResultSet rs = null;</span>
+<span class="fc" id="L382">        T result = null;</span>
+
+        try {
+<span class="pc bpc" id="L385" title="1 of 4 branches missed.">            if (params != null &amp;&amp; params.length &gt; 0) {</span>
+<span class="fc" id="L386">                PreparedStatement ps = this.prepareStatement(conn, sql);</span>
+<span class="fc" id="L387">                stmt = ps;</span>
+<span class="fc" id="L388">                this.fillStatement(ps, params);</span>
+<span class="fc" id="L389">                rs = this.wrap(ps.executeQuery());</span>
+<span class="fc" id="L390">            } else {</span>
+<span class="fc" id="L391">                stmt = conn.createStatement();</span>
+<span class="fc" id="L392">                rs = this.wrap(stmt.executeQuery(sql));</span>
+            }
+<span class="fc" id="L394">            result = rsh.handle(rs);</span>
+
+<span class="fc" id="L396">        } catch (final SQLException e) {</span>
+<span class="nc" id="L397">            this.rethrow(e, sql, params);</span>
+
+        } finally {
+<span class="fc" id="L400">            closeQuietly(rs);</span>
+<span class="fc" id="L401">            closeQuietly(stmt);</span>
+<span class="fc bfc" id="L402" title="All 2 branches covered.">            if (closeConn) {</span>
+<span class="fc" id="L403">                close(conn);</span>
+            }
+        }
+
+<span class="fc" id="L407">        return result;</span>
+    }
+
+    /**
+     * Execute an SQL INSERT, UPDATE, or DELETE query without replacement
+     * parameters.
+     *
+     * @param conn The connection to use to run the query.
+     * @param sql The SQL to execute.
+     * @return The number of rows updated.
+     * @throws SQLException if a database access error occurs
+     */
+    public int update(final Connection conn, final String sql) throws SQLException {
+<span class="fc" id="L420">        return this.update(conn, false, sql, (Object[]) null);</span>
+    }
+
+    /**
+     * Execute an SQL INSERT, UPDATE, or DELETE query with a single replacement
+     * parameter.
+     *
+     * @param conn The connection to use to run the query.
+     * @param sql The SQL to execute.
+     * @param param The replacement parameter.
+     * @return The number of rows updated.
+     * @throws SQLException if a database access error occurs
+     */
+    public int update(final Connection conn, final String sql, final Object param) throws SQLException {
+<span class="fc" id="L434">        return this.update(conn, false, sql, param);</span>
+    }
+
+    /**
+     * Execute an SQL INSERT, UPDATE, or DELETE query.
+     *
+     * @param conn The connection to use to run the query.
+     * @param sql The SQL to execute.
+     * @param params The query replacement parameters.
+     * @return The number of rows updated.
+     * @throws SQLException if a database access error occurs
+     */
+    public int update(final Connection conn, final String sql, final Object... params) throws SQLException {
+<span class="fc" id="L447">        return update(conn, false, sql, params);</span>
+    }
+
+    /**
+     * Executes the given INSERT, UPDATE, or DELETE SQL statement without
+     * any replacement parameters. The {@code Connection} is retrieved
+     * from the {@code DataSource} set in the constructor.  This
+     * {@code Connection} must be in auto-commit mode or the update will
+     * not be saved.
+     *
+     * @param sql The SQL statement to execute.
+     * @throws SQLException if a database access error occurs
+     * @return The number of rows updated.
+     */
+    public int update(final String sql) throws SQLException {
+<span class="fc" id="L462">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="fc" id="L463">            return this.update(conn, true, sql, (Object[]) null);</span>
+        }
+    }
+
+    /**
+     * Executes the given INSERT, UPDATE, or DELETE SQL statement with
+     * a single replacement parameter.  The {@code Connection} is
+     * retrieved from the {@code DataSource} set in the constructor.
+     * This {@code Connection} must be in auto-commit mode or the
+     * update will not be saved.
+     *
+     * @param sql The SQL statement to execute.
+     * @param param The replacement parameter.
+     * @throws SQLException if a database access error occurs
+     * @return The number of rows updated.
+     */
+    public int update(final String sql, final Object param) throws SQLException {
+<span class="fc" id="L480">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="fc" id="L481">            return this.update(conn, true, sql, param);</span>
+        }
+    }
+
+    /**
+     * Executes the given INSERT, UPDATE, or DELETE SQL statement.  The
+     * {@code Connection} is retrieved from the {@code DataSource}
+     * set in the constructor.  This {@code Connection} must be in
+     * auto-commit mode or the update will not be saved.
+     *
+     * @param sql The SQL statement to execute.
+     * @param params Initializes the PreparedStatement's IN (i.e. '?')
+     * parameters.
+     * @throws SQLException if a database access error occurs
+     * @return The number of rows updated.
+     */
+    public int update(final String sql, final Object... params) throws SQLException {
+<span class="fc" id="L498">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="fc" id="L499">            return this.update(conn, true, sql, params);</span>
+        }
+    }
+
+    /**
+     * Calls update after checking the parameters to ensure nothing is null.
+     * @param conn The connection to use for the update call.
+     * @param closeConn True if the connection should be closed, false otherwise.
+     * @param sql The SQL statement to execute.
+     * @param params An array of update replacement parameters.  Each row in
+     * this array is one set of update replacement values.
+     * @return The number of rows updated.
+     * @throws SQLException If there are database or parameter errors.
+     */
+    private int update(final Connection conn, final boolean closeConn, final String sql, final Object... params) throws SQLException {
+<span class="fc bfc" id="L514" title="All 2 branches covered.">        if (conn == null) {</span>
+<span class="fc" id="L515">            throw new SQLException(&quot;Null connection&quot;);</span>
+        }
+
+<span class="fc bfc" id="L518" title="All 2 branches covered.">        if (sql == null) {</span>
+<span class="pc bpc" id="L519" title="1 of 2 branches missed.">            if (closeConn) {</span>
+<span class="fc" id="L520">                close(conn);</span>
+            }
+<span class="fc" id="L522">            throw new SQLException(&quot;Null SQL statement&quot;);</span>
+        }
+
+<span class="fc" id="L525">        Statement stmt = null;</span>
+<span class="fc" id="L526">        int rows = 0;</span>
+
+        try {
+<span class="pc bpc" id="L529" title="1 of 4 branches missed.">            if (params != null &amp;&amp; params.length &gt; 0) {</span>
+<span class="fc" id="L530">                PreparedStatement ps = this.prepareStatement(conn, sql);</span>
+<span class="fc" id="L531">                stmt = ps;</span>
+<span class="fc" id="L532">                this.fillStatement(ps, params);</span>
+<span class="fc" id="L533">                rows = ps.executeUpdate();</span>
+<span class="fc" id="L534">            } else {</span>
+<span class="fc" id="L535">                stmt = conn.createStatement();</span>
+<span class="fc" id="L536">                rows = stmt.executeUpdate(sql);</span>
+            }
+
+<span class="fc" id="L539">        } catch (final SQLException e) {</span>
+<span class="nc" id="L540">            this.rethrow(e, sql, params);</span>
+
+        } finally {
+<span class="fc" id="L543">            close(stmt);</span>
+<span class="fc bfc" id="L544" title="All 2 branches covered.">            if (closeConn) {</span>
+<span class="fc" id="L545">                close(conn);</span>
+            }
+        }
+
+<span class="fc" id="L549">        return rows;</span>
+    }
+
+    /**
+     * Executes the given INSERT SQL without any replacement parameters.
+     * The {@code Connection} is retrieved from the
+     * {@code DataSource} set in the constructor.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param sql The SQL statement to execute.
+     * @param rsh The handler used to create the result object from
+     * the {@code ResultSet} of auto-generated keys.
+     * @return An object generated by the handler.
+     * @throws SQLException if a database access error occurs
+     * @since 1.6
+     */
+    public &lt;T&gt; T insert(final String sql, final ResultSetHandler&lt;T&gt; rsh) throws SQLException {
+<span class="nc" id="L565">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="nc" id="L566">            return insert(conn, true, sql, rsh, (Object[]) null);</span>
+        }
+    }
+
+    /**
+     * Executes the given INSERT SQL statement. The
+     * {@code Connection} is retrieved from the {@code DataSource}
+     * set in the constructor.  This {@code Connection} must be in
+     * auto-commit mode or the insert will not be saved.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param sql The SQL statement to execute.
+     * @param rsh The handler used to create the result object from
+     * the {@code ResultSet} of auto-generated keys.
+     * @param params Initializes the PreparedStatement's IN (i.e. '?')
+     * @return An object generated by the handler.
+     * @throws SQLException if a database access error occurs
+     * @since 1.6
+     */
+    public &lt;T&gt; T insert(final String sql, final ResultSetHandler&lt;T&gt; rsh, final Object... params) throws SQLException {
+<span class="fc" id="L585">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="fc" id="L586">            return insert(conn, true, sql, rsh, params);</span>
+        }
+    }
+
+    /**
+     * Execute an SQL INSERT query without replacement parameters.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param conn The connection to use to run the query.
+     * @param sql The SQL to execute.
+     * @param rsh The handler used to create the result object from
+     * the {@code ResultSet} of auto-generated keys.
+     * @return An object generated by the handler.
+     * @throws SQLException if a database access error occurs
+     * @since 1.6
+     */
+    public &lt;T&gt; T insert(final Connection conn, final String sql, final ResultSetHandler&lt;T&gt; rsh) throws SQLException {
+<span class="nc" id="L602">        return insert(conn, false, sql, rsh, (Object[]) null);</span>
+    }
+
+    /**
+     * Execute an SQL INSERT query.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param conn The connection to use to run the query.
+     * @param sql The SQL to execute.
+     * @param rsh The handler used to create the result object from
+     * the {@code ResultSet} of auto-generated keys.
+     * @param params The query replacement parameters.
+     * @return An object generated by the handler.
+     * @throws SQLException if a database access error occurs
+     * @since 1.6
+     */
+    public &lt;T&gt; T insert(final Connection conn, final String sql, final ResultSetHandler&lt;T&gt; rsh, final Object... params) throws SQLException {
+<span class="nc" id="L618">        return insert(conn, false, sql, rsh, params);</span>
+    }
+
+    /**
+     * Executes the given INSERT SQL statement.
+     * @param conn The connection to use for the query call.
+     * @param closeConn True if the connection should be closed, false otherwise.
+     * @param sql The SQL statement to execute.
+     * @param rsh The handler used to create the result object from
+     * the {@code ResultSet} of auto-generated keys.
+     * @param params The query replacement parameters.
+     * @return An object generated by the handler.
+     * @throws SQLException If there are database or parameter errors.
+     * @since 1.6
+     */
+    private &lt;T&gt; T insert(final Connection conn, final boolean closeConn, final String sql, final ResultSetHandler&lt;T&gt; rsh, final Object... params)
+            throws SQLException {
+<span class="pc bpc" id="L635" title="1 of 2 branches missed.">        if (conn == null) {</span>
+<span class="nc" id="L636">            throw new SQLException(&quot;Null connection&quot;);</span>
+        }
+
+<span class="pc bpc" id="L639" title="1 of 2 branches missed.">        if (sql == null) {</span>
+<span class="nc bnc" id="L640" title="All 2 branches missed.">            if (closeConn) {</span>
+<span class="nc" id="L641">                close(conn);</span>
+            }
+<span class="nc" id="L643">            throw new SQLException(&quot;Null SQL statement&quot;);</span>
+        }
+
+<span class="pc bpc" id="L646" title="1 of 2 branches missed.">        if (rsh == null) {</span>
+<span class="nc bnc" id="L647" title="All 2 branches missed.">            if (closeConn) {</span>
+<span class="nc" id="L648">                close(conn);</span>
+            }
+<span class="nc" id="L650">            throw new SQLException(&quot;Null ResultSetHandler&quot;);</span>
+        }
+
+<span class="fc" id="L653">        Statement stmt = null;</span>
+<span class="fc" id="L654">        T generatedKeys = null;</span>
+
+        try {
+<span class="pc bpc" id="L657" title="2 of 4 branches missed.">            if (params != null &amp;&amp; params.length &gt; 0) {</span>
+<span class="fc" id="L658">                PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);</span>
+<span class="fc" id="L659">                stmt = ps;</span>
+<span class="fc" id="L660">                this.fillStatement(ps, params);</span>
+<span class="fc" id="L661">                ps.executeUpdate();</span>
+<span class="fc" id="L662">            } else {</span>
+<span class="nc" id="L663">                stmt = conn.createStatement();</span>
+<span class="nc" id="L664">                stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);</span>
+            }
+<span class="fc" id="L666">            final ResultSet resultSet = stmt.getGeneratedKeys();</span>
+<span class="fc" id="L667">            generatedKeys = rsh.handle(resultSet);</span>
+<span class="nc" id="L668">        } catch (final SQLException e) {</span>
+<span class="nc" id="L669">            this.rethrow(e, sql, params);</span>
+        } finally {
+<span class="fc" id="L671">            close(stmt);</span>
+<span class="pc bpc" id="L672" title="1 of 2 branches missed.">            if (closeConn) {</span>
+<span class="fc" id="L673">                close(conn);</span>
+            }
+        }
+
+<span class="fc" id="L677">        return generatedKeys;</span>
+    }
+
+    /**
+     * Executes the given batch of INSERT SQL statements. The
+     * {@code Connection} is retrieved from the {@code DataSource}
+     * set in the constructor.  This {@code Connection} must be in
+     * auto-commit mode or the insert will not be saved.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param sql The SQL statement to execute.
+     * @param rsh The handler used to create the result object from
+     * the {@code ResultSet} of auto-generated keys.
+     * @param params Initializes the PreparedStatement's IN (i.e. '?')
+     * @return The result generated by the handler.
+     * @throws SQLException if a database access error occurs
+     * @since 1.6
+     */
+    public &lt;T&gt; T insertBatch(final String sql, final ResultSetHandler&lt;T&gt; rsh, final Object[][] params) throws SQLException {
+<span class="fc" id="L695">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="fc" id="L696">            return insertBatch(conn, true, sql, rsh, params);</span>
+        }
+    }
+
+    /**
+     * Executes the given batch of INSERT SQL statements.
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param conn The connection to use to run the query.
+     * @param sql The SQL to execute.
+     * @param rsh The handler used to create the result object from
+     * the {@code ResultSet} of auto-generated keys.
+     * @param params The query replacement parameters.
+     * @return The result generated by the handler.
+     * @throws SQLException if a database access error occurs
+     * @since 1.6
+     */
+    public &lt;T&gt; T insertBatch(final Connection conn, final String sql, final ResultSetHandler&lt;T&gt; rsh, final Object[][] params) throws SQLException {
+<span class="nc" id="L713">        return insertBatch(conn, false, sql, rsh, params);</span>
+    }
+
+    /**
+     * Executes the given batch of INSERT SQL statements.
+     * @param conn The connection to use for the query call.
+     * @param closeConn True if the connection should be closed, false otherwise.
+     * @param sql The SQL statement to execute.
+     * @param rsh The handler used to create the result object from
+     * the {@code ResultSet} of auto-generated keys.
+     * @param params The query replacement parameters.
+     * @return The result generated by the handler.
+     * @throws SQLException If there are database or parameter errors.
+     * @since 1.6
+     */
+    private &lt;T&gt; T insertBatch(final Connection conn, final boolean closeConn, final String sql, final ResultSetHandler&lt;T&gt; rsh, final Object[][] params)
+            throws SQLException {
+<span class="pc bpc" id="L730" title="1 of 2 branches missed.">        if (conn == null) {</span>
+<span class="nc" id="L731">            throw new SQLException(&quot;Null connection&quot;);</span>
+        }
+
+<span class="pc bpc" id="L734" title="1 of 2 branches missed.">        if (sql == null) {</span>
+<span class="nc bnc" id="L735" title="All 2 branches missed.">            if (closeConn) {</span>
+<span class="nc" id="L736">                close(conn);</span>
+            }
+<span class="nc" id="L738">            throw new SQLException(&quot;Null SQL statement&quot;);</span>
+        }
+
+<span class="pc bpc" id="L741" title="1 of 2 branches missed.">        if (params == null) {</span>
+<span class="nc bnc" id="L742" title="All 2 branches missed.">            if (closeConn) {</span>
+<span class="nc" id="L743">                close(conn);</span>
+            }
+<span class="nc" id="L745">            throw new SQLException(&quot;Null parameters. If parameters aren't need, pass an empty array.&quot;);</span>
+        }
+
+<span class="fc" id="L748">        PreparedStatement stmt = null;</span>
+<span class="fc" id="L749">        T generatedKeys = null;</span>
+        try {
+<span class="fc" id="L751">            stmt = this.prepareStatement(conn, sql, Statement.RETURN_GENERATED_KEYS);</span>
+
+<span class="fc bfc" id="L753" title="All 2 branches covered.">            for (Object[] param : params) {</span>
+<span class="fc" id="L754">                this.fillStatement(stmt, param);</span>
+<span class="fc" id="L755">                stmt.addBatch();</span>
+            }
+<span class="fc" id="L757">            stmt.executeBatch();</span>
+<span class="fc" id="L758">            final ResultSet rs = stmt.getGeneratedKeys();</span>
+<span class="fc" id="L759">            generatedKeys = rsh.handle(rs);</span>
+
+<span class="nc" id="L761">        } catch (final SQLException e) {</span>
+<span class="nc" id="L762">            this.rethrow(e, sql, (Object[])params);</span>
+        } finally {
+<span class="fc" id="L764">            close(stmt);</span>
+<span class="pc bpc" id="L765" title="1 of 2 branches missed.">            if (closeConn) {</span>
+<span class="fc" id="L766">                close(conn);</span>
+            }
+        }
+
+<span class="fc" id="L770">        return generatedKeys;</span>
+    }
+
+    /**
+     * Execute an SQL statement, including a stored procedure call, which does
+     * not return any result sets.
+     * Any parameters which are instances of {@link OutParameter} will be
+     * registered as OUT parameters.
+     * &lt;p&gt;
+     * Use this method when invoking a stored procedure with OUT parameters
+     * that does not return any result sets.  If you are not invoking a stored
+     * procedure, or the stored procedure has no OUT parameters, consider using
+     * {@link #update(java.sql.Connection, java.lang.String, java.lang.Object...) }.
+     * If the stored procedure returns result sets, use
+     * {@link #execute(java.sql.Connection, java.lang.String, org.apache.commons.dbutils.ResultSetHandler, java.lang.Object...) }.
+     *
+     * @param conn The connection to use to run the query.
+     * @param sql The SQL to execute.
+     * @param params The query replacement parameters.
+     * @return The number of rows updated.
+     * @throws SQLException if a database access error occurs
+     */
+    public int execute(final Connection conn, final String sql, final Object... params) throws SQLException {
+<span class="fc" id="L793">        return this.execute(conn, false, sql, params);</span>
+    }
+
+    /**
+     * Execute an SQL statement, including a stored procedure call, which does
+     * not return any result sets.
+     * Any parameters which are instances of {@link OutParameter} will be
+     * registered as OUT parameters.
+     * &lt;p&gt;
+     * Use this method when invoking a stored procedure with OUT parameters
+     * that does not return any result sets.  If you are not invoking a stored
+     * procedure, or the stored procedure has no OUT parameters, consider using
+     * {@link #update(java.lang.String, java.lang.Object...) }.
+     * If the stored procedure returns result sets, use
+     * {@link #execute(java.lang.String, org.apache.commons.dbutils.ResultSetHandler, java.lang.Object...) }.
+     * &lt;p&gt;
+     * The {@code Connection} is retrieved from the {@code DataSource}
+     * set in the constructor.  This {@code Connection} must be in
+     * auto-commit mode or the update will not be saved.
+     *
+     * @param sql The SQL statement to execute.
+     * @param params Initializes the CallableStatement's parameters (i.e. '?').
+     * @throws SQLException if a database access error occurs
+     * @return The number of rows updated.
+     */
+    public int execute(final String sql, final Object... params) throws SQLException {
+<span class="fc" id="L819">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="fc" id="L820">            return this.execute(conn, true, sql, params);</span>
+        }
+    }
+
+    /**
+     * Execute an SQL statement, including a stored procedure call, which
+     * returns one or more result sets.
+     * Any parameters which are instances of {@link OutParameter} will be
+     * registered as OUT parameters.
+     * &lt;p&gt;
+     * Use this method when: a) running SQL statements that return multiple
+     * result sets; b) invoking a stored procedure that return result
+     * sets and OUT parameters.  Otherwise you may wish to use
+     * {@link #query(java.sql.Connection, java.lang.String, org.apache.commons.dbutils.ResultSetHandler, java.lang.Object...) }
+     * (if there are no OUT parameters) or
+     * {@link #execute(java.sql.Connection, java.lang.String, java.lang.Object...) }
+     * (if there are no result sets).
+     *
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param conn The connection to use to run the query.
+     * @param sql The SQL to execute.
+     * @param rsh The result set handler
+     * @param params The query replacement parameters.
+     * @return A list of objects generated by the handler
+     * @throws SQLException if a database access error occurs
+     */
+    public &lt;T&gt; List&lt;T&gt; execute(final Connection conn, final String sql, final ResultSetHandler&lt;T&gt; rsh, final Object... params) throws SQLException {
+<span class="fc" id="L847">        return this.execute(conn, false, sql, rsh, params);</span>
+    }
+
+    /**
+     * Execute an SQL statement, including a stored procedure call, which
+     * returns one or more result sets.
+     * Any parameters which are instances of {@link OutParameter} will be
+     * registered as OUT parameters.
+     * &lt;p&gt;
+     * Use this method when: a) running SQL statements that return multiple
+     * result sets; b) invoking a stored procedure that return result
+     * sets and OUT parameters.  Otherwise you may wish to use
+     * {@link #query(java.lang.String, org.apache.commons.dbutils.ResultSetHandler, java.lang.Object...) }
+     * (if there are no OUT parameters) or
+     * {@link #execute(java.lang.String, java.lang.Object...) }
+     * (if there are no result sets).
+     *
+     * @param &lt;T&gt; The type of object that the handler returns
+     * @param sql The SQL to execute.
+     * @param rsh The result set handler
+     * @param params The query replacement parameters.
+     * @return A list of objects generated by the handler
+     * @throws SQLException if a database access error occurs
+     */
+    public &lt;T&gt; List&lt;T&gt; execute(final String sql, final ResultSetHandler&lt;T&gt; rsh, final Object... params) throws SQLException {
+<span class="fc" id="L872">        try (final Connection conn = this.prepareConnection()) {</span>
+<span class="fc" id="L873">            return this.execute(conn, true, sql, rsh, params);</span>
+        }
+    }
+
+    /**
+     * Invokes the stored procedure via update after checking the parameters to
+     * ensure nothing is null.
+     * @param conn The connection to use for the update call.
+     * @param closeConn True if the connection should be closed, false otherwise.
+     * @param sql The SQL statement to execute.
+     * @param params An array of update replacement parameters.  Each row in
+     * this array is one set of update replacement values.
+     * @return The number of rows updated.
+     * @throws SQLException If there are database or parameter errors.
+     */
+    private int execute(final Connection conn, final boolean closeConn, final String sql, final Object... params) throws SQLException {
+<span class="fc bfc" id="L889" title="All 2 branches covered.">        if (conn == null) {</span>
+<span class="fc" id="L890">            throw new SQLException(&quot;Null connection&quot;);</span>
+        }
+
+<span class="fc bfc" id="L893" title="All 2 branches covered.">        if (sql == null) {</span>
+<span class="pc bpc" id="L894" title="1 of 2 branches missed.">            if (closeConn) {</span>
+<span class="fc" id="L895">                close(conn);</span>
+            }
+<span class="fc" id="L897">            throw new SQLException(&quot;Null SQL statement&quot;);</span>
+        }
+
+<span class="fc" id="L900">        CallableStatement stmt = null;</span>
+<span class="fc" id="L901">        int rows = 0;</span>
+
+        try {
+<span class="fc" id="L904">            stmt = this.prepareCall(conn, sql);</span>
+<span class="fc" id="L905">            this.fillStatement(stmt, params);</span>
+<span class="fc" id="L906">            stmt.execute();</span>
+<span class="fc" id="L907">            rows = stmt.getUpdateCount();</span>
+<span class="fc" id="L908">            this.retrieveOutParameters(stmt, params);</span>
+
+<span class="fc" id="L910">        } catch (final SQLException e) {</span>
+<span class="nc" id="L911">            this.rethrow(e, sql, params);</span>
+
+        } finally {
+<span class="fc" id="L914">            close(stmt);</span>
+<span class="fc bfc" id="L915" title="All 2 branches covered.">            if (closeConn) {</span>
+<span class="fc" id="L916">                close(conn);</span>
+            }
+        }
+
+<span class="fc" id="L920">        return rows;</span>
+    }
+
+    /**
+     * Invokes the stored procedure via update after checking the parameters to
+     * ensure nothing is null.
+     * @param conn The connection to use for the update call.
+     * @param closeConn True if the connection should be closed, false otherwise.
+     * @param sql The SQL statement to execute.
+     * @param rsh The result set handler
+     * @param params An array of update replacement parameters.  Each row in
+     * this array is one set of update replacement values.
+     * @return List of all objects generated by the ResultSetHandler for all result sets handled.
+     * @throws SQLException If there are database or parameter errors.
+     */
+    private &lt;T&gt; List&lt;T&gt; execute(final Connection conn, final boolean closeConn, final String sql, final ResultSetHandler&lt;T&gt; rsh, final Object... params) throws SQLException {
+<span class="fc bfc" id="L936" title="All 2 branches covered.">        if (conn == null) {</span>
+<span class="fc" id="L937">            throw new SQLException(&quot;Null connection&quot;);</span>
+        }
+
+<span class="fc bfc" id="L940" title="All 2 branches covered.">        if (sql == null) {</span>
+<span class="pc bpc" id="L941" title="1 of 2 branches missed.">            if (closeConn) {</span>
+<span class="fc" id="L942">                close(conn);</span>
+            }
+<span class="fc" id="L944">            throw new SQLException(&quot;Null SQL statement&quot;);</span>
+        }
+
+<span class="fc bfc" id="L947" title="All 2 branches covered.">        if (rsh == null) {</span>
+<span class="pc bpc" id="L948" title="1 of 2 branches missed.">            if (closeConn) {</span>
+<span class="fc" id="L949">                close(conn);</span>
+            }
+<span class="fc" id="L951">            throw new SQLException(&quot;Null ResultSetHandler&quot;);</span>
+        }
+
+<span class="fc" id="L954">        CallableStatement stmt = null;</span>
+<span class="fc" id="L955">        final List&lt;T&gt; results = new LinkedList&lt;&gt;();</span>
+
+        try {
+<span class="fc" id="L958">            stmt = this.prepareCall(conn, sql);</span>
+<span class="fc" id="L959">            this.fillStatement(stmt, params);</span>
+<span class="fc" id="L960">            boolean moreResultSets = stmt.execute();</span>
+            // Handle multiple result sets by passing them through the handler
+            // retaining the final result
+<span class="fc" id="L963">            ResultSet rs = null;</span>
+<span class="fc bfc" id="L964" title="All 2 branches covered.">            while (moreResultSets) {</span>
+                try {
+<span class="fc" id="L966">                    rs = this.wrap(stmt.getResultSet());</span>
+<span class="fc" id="L967">                    results.add(rsh.handle(rs));</span>
+<span class="fc" id="L968">                    moreResultSets = stmt.getMoreResults();</span>
+
+                } finally {
+<span class="fc" id="L971">                    close(rs);</span>
+<span class="fc" id="L972">                }</span>
+            }
+<span class="fc" id="L974">            this.retrieveOutParameters(stmt, params);</span>
+
+<span class="fc" id="L976">        } catch (final SQLException e) {</span>
+<span class="nc" id="L977">            this.rethrow(e, sql, params);</span>
+
+        } finally {
+<span class="fc" id="L980">            close(stmt);</span>
+<span class="fc bfc" id="L981" title="All 2 branches covered.">            if (closeConn) {</span>
+<span class="fc" id="L982">                close(conn);</span>
+            }
+        }
+
+<span class="fc" id="L986">        return results;</span>
+    }
+
+    /**
+     * Set the value on all the {@link OutParameter} instances in the
+     * {@code params} array using the OUT parameter values from the
+     * {@code stmt}.
+     * @param stmt the statement from which to retrieve OUT parameter values
+     * @param params the parameter array for the statement invocation
+     * @throws SQLException when the value could not be retrieved from the
+     * statement.
+     */
+    private void retrieveOutParameters(final CallableStatement stmt, final Object[] params) throws SQLException {
+<span class="pc bpc" id="L999" title="1 of 2 branches missed.">        if (params != null) {</span>
+<span class="fc bfc" id="L1000" title="All 2 branches covered.">            for (int i = 0; i &lt; params.length; i++) {</span>
+<span class="fc bfc" id="L1001" title="All 2 branches covered.">                if (params[i] instanceof OutParameter) {</span>
+<span class="fc" id="L1002">                    ((OutParameter)params[i]).setValue(stmt, i + 1);</span>
+                }
+            }
+        }
+<span class="fc" id="L1006">    }</span>
+}
+</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.5.201910111838</span></div></body></html>
\ No newline at end of file

Added: dev/commons/dbutils/1.8-RC2/site/jacoco/org.apache.commons.dbutils/ResultSetIterator$1.html
==============================================================================
--- dev/commons/dbutils/1.8-RC2/site/jacoco/org.apache.commons.dbutils/ResultSetIterator$1.html (added)
+++ dev/commons/dbutils/1.8-RC2/site/jacoco/org.apache.commons.dbutils/ResultSetIterator$1.html Wed Jan  8 06:02:46 2020
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ResultSetIterator.new Iterable() {...}</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Apache Commons DbUtils</a> &gt; <a href="index.html" class="el_package">org.apache.commons.dbutils</a> &gt; <span class="el_class">ResultSetIterator.new Iterable() {...}</span></div><h1>ResultSetIterator.new I
 terable() {...}</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">12 of 12</td><td class="ctr2">0%</td><td class="bar">0 of
  0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="ResultSetIterator.java.html#L131" class="el_method">{...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="ResultSetIterator.java.html#L135" class="el_method">iterator()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="
 f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.5.201910111838</span></div></body></html>
\ No newline at end of file