Bump actions/cache from 3.0.2 to 3.0.3
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 2169c2d..24151bd 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -1,47 +1,47 @@
-# 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 "License"); 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 "AS IS" 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.
-
-name: Java CI
-
-on: [push, pull_request]
-
-jobs:
-  build:
-
-    runs-on: ubuntu-latest
-    continue-on-error: ${{ matrix.experimental }}
-    strategy:
-      matrix:
-        java: [ 8, 11, 17 ]
-        experimental: [false]
-#        include:
-#          - java: 18-ea
-#            experimental: true
-        
-    steps:
-    - uses: actions/checkout@v3
-    - uses: actions/cache@v3.0.2
-      with:
-        path: ~/.m2/repository
-        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
-        restore-keys: |
-          ${{ runner.os }}-maven-
-    - name: Set up JDK ${{ matrix.java }}
-      uses: actions/setup-java@v3
-      with:
-        distribution: 'temurin'
-        java-version: ${{ matrix.java }}
-    - name: Build with Maven
-      run: mvn -V --file pom.xml --no-transfer-progress
+# 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 "License"); 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 "AS IS" 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.

+

+name: Java CI

+

+on: [push, pull_request]

+

+jobs:

+  build:

+

+    runs-on: ubuntu-latest

+    continue-on-error: ${{ matrix.experimental }}

+    strategy:

+      matrix:

+        java: [ 8, 11, 17 ]

+        experimental: [false]

+#        include:

+#          - java: 18-ea

+#            experimental: true

+        

+    steps:

+    - uses: actions/checkout@v3

+    - uses: actions/cache@v3.0.3

+      with:

+        path: ~/.m2/repository

+        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}

+        restore-keys: |

+          ${{ runner.os }}-maven-

+    - name: Set up JDK ${{ matrix.java }}

+      uses: actions/setup-java@v3

+      with:

+        distribution: 'temurin'

+        java-version: ${{ matrix.java }}

+    - name: Build with Maven

+      run: mvn -V --file pom.xml --no-transfer-progress

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 04373b5..b0d03a2 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -1,420 +1,420 @@
-<?xml version="1.0"?>
-<!--
- 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 "License"); 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 "AS IS" 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.
--->
-
-<!--
-This file is used by the maven-changes-plugin to generate the release notes.
-Useful ways of finding items to add to this file are:
-
-1.  Add items when you fix a bug or add a feature (this makes the
-release process easy :-).
-
-2.  Do a bugzilla search for tickets closed since the previous release.
-
-3.  Use the report generated by the maven-changelog-plugin to see all
-CVS commits.  Set the project.properties' maven.changelog.range
-property to the number of days since the last release.
-
-To regenerate the RELEASE-NOTES.txt:
-
-mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=m.n]
-
-The <action> type attribute can be add,update,fix,remove.
--->
-
-<document xmlns="http://maven.apache.org/changes/1.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/plugins/maven-changes-plugin/xsd/changes-1.0.0.xsd">
-  <properties>
-    <title>Apache Commons DBUtils Release Notes</title>
-  </properties>
-  <body>
-
-    <release version="2.0" date="2020-MM-DD" description="New features and bug fixes.">
-      <!--  FIX -->
-      <action dev="thecarlhall" type="fix" issue="DBUTILS-131" due-to="yairlenga">
-        Speedup query calls without parameters; Use PreparedStatement only when parameters are present.
-      </action>
-      <action dev="thecarlhall" type="fix">
-        Always copy Date, Time, Timestamp on get and set in SqlNullCheckedResultSet.
-      </action>
-      <action dev="ggregory" type="update" issue="DBUTILS-135" due-to="hdevalke">
-        BeanProcessor is not thread safe since [DBUTILS-124].
-      </action>
-      <action dev="ggregory" type="update" issue="DBUTILS-137" due-to="Gary Gregory">
-        Inefficient allocation of Maps in org.apache.commons.dbutils.BasicRowProcessor.toMap(ResultSet).
-      </action>
-      <action dev="ggregory" type="fix" issue="DBUTILS-138" due-to="Stefano Lissa, Gary Gregory">
-        org.apache.commons.dbutils.QueryRunner.query(Connection, boolean, String, ResultSetHandler&lt;T>, Object...) Exception in closing statement leave connections open.
-      </action>
-      <action dev="ggregory" type="fix" issue="DBUTILS-139" due-to="Gary Gregory">
-        Update Java requirement from version 6 to 7.
-      </action>
-      <action due-to="thecarlhall" type="update">
-        clirr, checkstyle, and spotbugs configured as part of default build.
-      </action>
-      <action dev="ggregory" due-to="Amey Jadiye" type="fix">
-        Correction of coverage badge #10.
-      </action>
-      <!-- ADD -->
-      <action dev="thecarlhall" type="add" issue="PR/9" due-to="rewerma">
-        Add @Column annotation to hint the field name instead of dissecting the get method name.
-      </action>
-      <action dev="ggregory" type="add" issue="DBUTILS-136" due-to="Matthew Hall, Gary Gregory">
-        CaseInsensitiveHashMap cannot be accessed by subclasses of BasicRowProcessor; add org.apache.commons.dbutils.BasicRowProcessor.createCaseInsensitiveHashMap(int).
-      </action>
-      <action dev="ggregory" type="add">
-        Add github/codeql-action #115.
-      </action>
-      <!--  UPDATE -->
-      <action dev="ggregory" type="update" due-to="Dependabot">
-        Bump actions/checkout from 1 to 3, #44, #23, #48, #93, #75.
-      </action>
-      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
-        Bump actions/cache from 2 to 3.0.2 #109.
-      </action>
-      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
-        Bump actions/setup-java from 1.4.0 to 3 #40.
-      </action>
-      <action dev="ggregory" type="update" due-to="Dependabot">
-        Bump commons-parent from 50 to 53 #14, #113.
-      </action>
-      <action dev="ggregory" type="update" due-to="Dependabot">
-        Bump junit from 4.12 to 4.13.2 #16, #42, #58.
-      </action>
-      <action dev="ggregory" type="update" due-to="Dependabot">
-        Bump mockito-core from 3.2.4 to 5.5.1 #18, #21, #46, #53, #97, #103, #111, #116.
-      </action>
-      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
-        Bump spotbugs-maven-plugin from 3.1.12.2 to 4.4.2, #17, #45, #52.
-      </action>
-      <action dev="ggregory" type="update" due-to="Gary Gregory">
-        Bump spotbugs from 3.1.12.2 to 4.2.3.
-      </action>
-      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
-        Bump maven-checkstyle-plugin from 3.1.0 to 3.1.2 #56.
-      </action>
-      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
-        Bump checkstyle from 8.28 to 8.35, #20.
-      </action>
-      <action dev="ggregory" type="update" due-to="Dependabot">
-        Bump checkstyle from 8.35 to 8.37 #47.
-      </action>
-      <action dev="ggregory" type="update" due-to="Gary Gregory">
-        Bump commons.japicmp.version 0.14.3 -> 0.15.2.
-      </action>
-      <action dev="ggregory" type="update" due-to="Gary Gregory">
-        Bump checkstyle from 8.37 to 9.3.
-      </action>
-    </release>
-    
-    <release version="1.7" date="2017-07-20" description="Bug fixes and separate column &amp; property handlers using SPI">
-      <action dev="sebb" type="update" issue="DBUTILS-117" due-to="Vadim Smirnov">
-        Error handling possible getParameterMetaData() results
-        - allow for null return
-        - handle SQLFeatureNotSupportedException
-      </action>
-      <action dev="britter" type="update" issue="DBUTILS-119" due-to="Michael Akerman">
-        Correct errors in BeanMapHandler Javadoc
-      </action>
-      <action dev="thecarlhall" type="add" issue="DBUTILS-121">
-        Add getWriteMethod to BeanProcessor to allow subclasses to influence which write method is used
-      </action>
-      <action dev="thecarlhall" type="fix" issue="DBUTILS-82" due-to="Kenshi Toriumi">
-        Change method contracts to allow extended class types when returning a bean populated from a query
-      </action>
-      <action dev="thecarlhall" type="fix" issue="DBUTILS-89" due-to="Adam Dyga">
-        Add method in BeanProcessor to populate an existing bean
-      </action>
-      <action dev="thecarlhall" type="fix" issue="DBUTILS-70" due-to="Michael Akerman">
-        Add ability to configure statements used in QueryRunner
-      </action>
-      <action dev="thecarlhall" type="add" issue="DBUTILS-50" due-to="Dan Fabulich">
-        Support CallableStatement "out" parameters
-      </action>
-      <action dev="thecarlhall" type="add" issue="DBUTILS-124">
-        Implement column and property handlers using Java's service interfaces.
-      </action>
-      <action dev="thecarlhall" type="update" issue="PR/1" due-to="Michael Hausegger">
-        Created some Unit Tests to increase code coverage.
-      </action>
-    </release>
-
-    <release version="1.6" date="2014-07-20" description="Bug fixes and addition of insert methods">
-      <action dev="britter" type="fix" issue="DBUTILS-110">
-        ArrayHandler should return an empty array when handle has no rows
-      </action>
-      <action dev="britter" type="fix" issue="DBUTILS-114" due-to="Michael Osipov">
-        Order of columns not retained in BasicRowProcessor with HashMap
-      </action>
-      <action dev="britter" type="fix" issue="DBUTILS-118" due-to="Feysal Rujbally, Daniele Cremonini">
-        BeanProcessor not returning nanoseconds
-      </action>
-      <action dev="britter" type="add" issue="DBUTILS-113" due-to="Graylin Kim, Michael Osipov">
-        Add support for conversion of ResultSet strings to enums in the BeanProcessor
-      </action>
-      <action dev="sebb" type="update" issue="DBUTILS-85">
-        In BeanProcessor#isCompatibleType, can Integer.class.isInstance(value) be replaced by value instanceof Integer (etc)?
-        Simplified code by using instanceof.
-      </action>
-      <action dev="sebb" due-to="Niall Pemberton" type="fix" issue="DBUTILS-106">
-        DBUtils can't build using JDK 1.7 - DriverProxy needs to implement getParentLogger()
-        Add dynamic invocation.
-      </action>
-      <action dev="wspeirs" due-to="Micah Huff" type="add" issue="DBUTILS-108">
-        Create functionality to return auto-generated keys in batches of SQL inserts
-      </action>
-      <action dev="wspeirs" due-to="PB" type="add" issue="DBUTILS-107">
-        Patch QueryLoader to also load from XML properties files
-      </action>
-      <action dev="wspeirs" due-to="xiaofei.xu" type="fix" issue="DBUTILS-100">
-        Updated the use of getColumnName to try getColumnLabel first
-      </action>
-      <action dev="simonetripodi" due-to="Moandji Ezana" type="add" issue="DBUTILS-98">
-        Add missing Javadoc to QueryRunner#insert
-      </action>
-      <action dev="simonetripodi" type="add" issue="DBUTILS-97">
-        Add an Abstract ResultSetHandler implementation in order to reduce redundant 'resultSet' variable invocation
-      </action>
-      <action dev="simonetripodi" due-to="yuyf" type="fix" issue="DBUTILS-96">
-        DbUtils#loadDriver(ClassLoader,String) makes DriverManager throwing "No suitable driver found for jdbc"
-        if ClassLoader is not the System's one
-      </action>
-      <action dev="wspeirs" due-to="Moandji Ezana" type="add" issue="DBUTILS-87">
-        Added insert methods to QueryRunner and AsyncQueryRunner that return the generated key.
-      </action>
-    </release>
-
-    <release version="1.5" date="2012-07-20" description="Bug fixes and addition of BeanMapHandler">
-      <action dev="simonetripodi" due-to="Benedikt Ritter" type="update" issue="DBUTILS-94">
-        Provide test coverage for org.apache.commons.dbutils.DbUtils
-      </action>
-      <action dev="simonetripodi" due-to="Stevo Slavic" type="fix" issue="DBUTILS-93">
-        Source assembly artifact fails to build a site because of missing pmd-ruleset.xml
-      </action>
-      <action dev="simonetripodi" due-to="Stevo Slavic" type="update" issue="DBUTILS-91">
-        Enhance BasicRowProcessor to have row mapping easier to configure
-      </action>
-      <action due-to="wspeirs" type="update">
-        Updated pom.xml: Java 1.6 now required, clirr and compiler plugin removed
-      </action>
-      <action due-to="Tiago Cavaleiro" dev="wspeirs" type="fix" issue="DBUTILS-84">
-        BeanProcessor method processColumn should take SQLXML in consideration
-      </action>
-      <action dev="wspeirs" type="update" issue="DBUTILS-77">
-        Updated documentation to better reflect the use of pmdKnownBroken
-      </action>
-      <action due-to="Sebb" type="fix" issue="DBUTILS-73">
-        Added a fixed Locale (Locale.ENGLISH) to all toLowerCase calls in BasicRowProcessor
-      </action>
-      <action due-to="Michael Osipov" type="add" issue="DBUTILS-67">
-        Added BeanMapHandler
-      </action>
-      <action due-to="Michael Osipov" type="update" issue="DBUTILS-66">
-        Added generics to ScalarHandler, ColumnHandler, and KeyedHandler
-      </action>
-    </release>
-
-    <release version="1.4" date="2011-10-23" description="Bug fixes and addition of asynchronous QueryLoader">
-      <action type="fix" issue="DBUTILS-81">
-        DbUtils.loadDriver() uses Class.forName()
-      </action>
-      <action type="fix" issue="DBUTILS-80">
-        DbUtils.loadDriver catches Throwable
-      </action>
-      <action type="fix" issue="DBUTILS-65">
-        Duplicate code introduced during Java 1.5 branch merge
-      </action>
-      <action type="fix" issue="DBUTILS-79">
-        fillStatement doesn't complain when there are too few parameters
-      </action>
-      <action type="update" issue="DBUTILS-75">
-        efficient usage from findbugs
-      </action>
-      <action dev="wspeirs" type="add" issue="DBUTILS-78">
-        Add asynchronous batch, query, and update calls
-      </action>
-    </release>
-
-    <release version="1.3" date="2009-11-04" description="Adds Java5 generics and varargs">
-      <action dev="dfabulich" type="add" issue="DBUTILS-48">
-        Java 1.5 generics and varargs
-      </action>
-      <action dev="dfabulich" type="update" issue="DBUTILS-57">
-        BeanProcessor#mapColumnsToProperties now prefers to use column labels over column names (where aliases are not set, these should be identical)
-      </action>
-      <action dev="dfabulich" type="update" issue="DBUTILS-58">
-        Setting pmdKnownBroken in QueryRunner constructor now completely ignores ParameterMetaData
-      </action>
-      <action dev="dfabulich" type="fix" issue="DBUTILS-60">
-        Fixed error message in QueryRunner#rethrow
-      </action>
-    </release>
-
-    <release version="1.2" date="2009-03-06" description="Another round of fixes; deprecates methods in preparation for varargs in java5">
-      <action dev="dfabulich" type="update" issue="DBUTILS-52">
-        Removed setDataSource method to guarantee thread safety
-      </action>
-      <action dev="sebb" type="update" issue="DBUTILS-51">
-        Made numerous private instance members final to guarantee thread safety; changed protected member of KeyedHandler to final
-      </action>
-      <action dev="bayard" type="remove">
-        Remove old Maven1/Ant build scripts
-      </action>
-      <action dev="dfabulich" type="update" issue="DBUTILS-29">
-        Support bean property to SQL IN parameter mapping
-      </action>
-      <action dev="dfabulich" type="fix" issue="DBUTILS-31">
-        fillStatement setNull bug with the Postgres/Derby JDBC driver (and others)
-      </action>
-      <action dev="dfabulich" type="update" issue="DBUTILS-33">
-        Make GenericListHandler (now AbstractListHandler) public
-      </action>
-      <action dev="dfabulich" type="update" issue="DBUTILS-34">
-        BasicRowProcessor loses any information on database field case
-      </action>
-      <action dev="dfabulich" type="update" issue="DBUTILS-37">
-        BeanListHandler#handle(ResultSet) is not optimal
-      </action>
-      <action dev="dfabulich" type="fix" issue="DBUTILS-40">
-        NullPointerException occured at rethrow method
-      </action>
-      <action dev="dfabulich" type="update" issue="DBUTILS-42">
-        Object with Long or Decimal got initial zero value while database field is null
-      </action>
-      <action dev="dennisl" type="update" issue="DBUTILS-38">
-        example documentation page, update query
-      </action>
-      <action dev="bayard" type="fix" issue="DBUTILS-36">
-        Add serialVersionUID to BasicRowProcessor.CaseInsensitiveHashMap
-      </action>
-    </release>
-
-    <release version="1.1" date="2006-12-01" description="Last couple of years of fixes">
-      <action dev="bayard" type="fix" issue="DBUTILS-32">
-        Tests fail to build under 1.6, and warning while compiling source
-      </action>
-      <action dev="bayard" type="fix" issue="DBUTILS-1">
-        BeanListHandler and BeanHandler fail to support java.sql.Date()
-      </action>
-      <action dev="bayard" type="update" issue="DBUTILS-16">
-        ResultSetRowProcessor abstract handler and some classes rework
-      </action>
-      <action dev="bayard" type="fix" issue="DBUTILS-3">
-        Setting bean properties fails silently
-      </action>
-      <action dev="dgraham" type="fix" issue="DBUTILS-9">
-        MockResultSet needs to handle equals and hashCode
-      </action>
-      <action dev="bayard" type="fix" issue="DBUTILS-7">
-        MockResultSet: Throw UnsupportedOperationException for not implemented methods
-      </action>
-      <action dev="dgraham" type="add" issue="DBUTILS-20">
-        Implement Pluggable Adaptors to Make BeanHandler Smarter
-      </action>
-      <action dev="dgraham" type="update" issue="DBUTILS-15">
-        Patch for extending BasicRowProcessor
-      </action>
-      <action dev="dgraham" type="add" issue="DBUTILS-12">
-        Protected QueryRunner.close() methods
-      </action>
-      <action dev="dgraham" type="update" issue="DBUTILS-23">
-        Updated docs for example.html page (select AS)
-      </action>
-      <action dev="dgraham" type="add" issue="DBUTILS-4">
-        Added protected ResultSetIterator.rethrow() method to wrap SQLExceptions in
-        RuntimeExceptions.
-      </action>
-      <action dev="dgraham" type="update" issue="DBUTILS-5">
-        Added SQLState and error code to rethrown SQLExceptions.
-      </action>
-      <action dev="dgraham" type="add" issue="DBUTILS-25">
-        Added KeyedHandler to create a Map of Maps from a ResultSet.
-      </action>
-      <action dev="dgraham" type="update" issue="DBUTILS-2">
-        Use current class' ClassLoader instead of QueryLoader's ClassLoader
-        in loadQueries().
-      </action>
-      <action dev="dgraham" type="update" issue="DBUTILS-22">
-        Made QueryLoader.loadQueries() protected so subclasses can use query
-        repositories other than properties files.
-      </action>
-      <action dev="dgraham" type="update">
-        QueryRunner now calls getDataSource() internally any time it needs access
-        to its DataSource object to allow subclasses to provide different behavior.
-      </action>
-      <action dev="dgraham" type="add">
-        Added DbUtils.rollbackAndClose() and DbUtils.rollbackAndCloseQuietly().
-      </action>
-      <action dev="dgraham" type="update" issue="DBUTILS-26">
-        Call ResultSet.getTimestamp() in BeanProcessor.processColumn() if
-        the bean property is a java.sql.Timestamp.  Oracle's getObject()
-        implementation returns its own incompatible Timestamp class.
-      </action>
-      <action dev="dgraham" type="update" issue="DBUTILS-18">
-        Changed QueryRunner.fillStatement() null handling
-        to use Types.VARCHAR instead of Types.OTHER.  This works for the
-        following tested drivers: Firebird 1.5/firebirdsql 1.5RC3,
-        Oracle 9/ Thin driver, MySQL 4.0/Msql Connecttor 3.0 and mm.mysql
-        2.0.4 MaxDB 7.5, HSQLDB 1.7.1, and MS Access/ODBC Bridge.
-      </action>
-      <action dev="dgraham" type="add" issue="DBUTILS-21">
-        Added a protected QueryRunner.prepareConnection() method to
-        allow subclasses to customize the Connections retrieved from
-        the DataSource before they're used.
-      </action>
-      <action dev="dgraham" type="add">
-        Refactored bean handling from BasicRowProcessor into new
-        BeanProcessor class.  This also fixes the common problem with
-        Oracle NUMERIC fields not being set into bean properties.
-      </action>
-      <action dev="dgraham" type="add" issue="DBUTILS-13">
-        Added QueryRunner.batch() methods for batch updates.
-      </action>
-      <action dev="dgraham" type="add" issue="DBUTILS-11">
-        Added new ResultSetHandler implementation, ColumnListHandler, that
-        converts one ResultSet column into a List of Objects.
-      </action>
-    </release>
-
-    <release version="1.0" date="2003-11-10" description="First release of DbUtils">
-      <action type="add">
-        This is the first release of the Commons DbUtils package.  DbUtils
-        is a small set of classes designed to make working with JDBC easier.
-      </action>
-      <action type="add">
-        QueryRunner class with ResultSetHandler interface allow you to easily query or
-        update a database and handle the ResultSet.  Several useful implementations
-        of the ResultSetHandler interface are located in the
-        org.apache.commons.dbutils.handlers.* package.
-      </action>
-      <action type="add">
-        ResultSet wrappers that decorate ResultSets with specialized
-        behavior.  See the classes in the org.apache.commons.dbutils.wrappers.*
-        package for details.
-      </action>
-      <action type="add">
-        Dynamic JDBC API interface implementations via the standard
-        java.lang.reflect.Proxy class.  This allows you to implement JDBC
-        interfaces such as ResultSet at runtime to avoid API version
-        incompatibilities.  See org.apache.commons.dbutils.ProxyFactory
-        for details.
-      </action>
-    </release>
-
-  </body>
-</document>
+<?xml version="1.0"?>

+<!--

+ 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 "License"); 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 "AS IS" 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.

+-->

+

+<!--

+This file is used by the maven-changes-plugin to generate the release notes.

+Useful ways of finding items to add to this file are:

+

+1.  Add items when you fix a bug or add a feature (this makes the

+release process easy :-).

+

+2.  Do a bugzilla search for tickets closed since the previous release.

+

+3.  Use the report generated by the maven-changelog-plugin to see all

+CVS commits.  Set the project.properties' maven.changelog.range

+property to the number of days since the last release.

+

+To regenerate the RELEASE-NOTES.txt:

+

+mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=m.n]

+

+The <action> type attribute can be add,update,fix,remove.

+-->

+

+<document xmlns="http://maven.apache.org/changes/1.0.0"

+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/plugins/maven-changes-plugin/xsd/changes-1.0.0.xsd">

+  <properties>

+    <title>Apache Commons DBUtils Release Notes</title>

+  </properties>

+  <body>

+

+    <release version="2.0" date="2020-MM-DD" description="New features and bug fixes.">

+      <!--  FIX -->

+      <action dev="thecarlhall" type="fix" issue="DBUTILS-131" due-to="yairlenga">

+        Speedup query calls without parameters; Use PreparedStatement only when parameters are present.

+      </action>

+      <action dev="thecarlhall" type="fix">

+        Always copy Date, Time, Timestamp on get and set in SqlNullCheckedResultSet.

+      </action>

+      <action dev="ggregory" type="update" issue="DBUTILS-135" due-to="hdevalke">

+        BeanProcessor is not thread safe since [DBUTILS-124].

+      </action>

+      <action dev="ggregory" type="update" issue="DBUTILS-137" due-to="Gary Gregory">

+        Inefficient allocation of Maps in org.apache.commons.dbutils.BasicRowProcessor.toMap(ResultSet).

+      </action>

+      <action dev="ggregory" type="fix" issue="DBUTILS-138" due-to="Stefano Lissa, Gary Gregory">

+        org.apache.commons.dbutils.QueryRunner.query(Connection, boolean, String, ResultSetHandler&lt;T>, Object...) Exception in closing statement leave connections open.

+      </action>

+      <action dev="ggregory" type="fix" issue="DBUTILS-139" due-to="Gary Gregory">

+        Update Java requirement from version 6 to 7.

+      </action>

+      <action due-to="thecarlhall" type="update">

+        clirr, checkstyle, and spotbugs configured as part of default build.

+      </action>

+      <action dev="ggregory" due-to="Amey Jadiye" type="fix">

+        Correction of coverage badge #10.

+      </action>

+      <!-- ADD -->

+      <action dev="thecarlhall" type="add" issue="PR/9" due-to="rewerma">

+        Add @Column annotation to hint the field name instead of dissecting the get method name.

+      </action>

+      <action dev="ggregory" type="add" issue="DBUTILS-136" due-to="Matthew Hall, Gary Gregory">

+        CaseInsensitiveHashMap cannot be accessed by subclasses of BasicRowProcessor; add org.apache.commons.dbutils.BasicRowProcessor.createCaseInsensitiveHashMap(int).

+      </action>

+      <action dev="ggregory" type="add">

+        Add github/codeql-action #115.

+      </action>

+      <!--  UPDATE -->

+      <action dev="ggregory" type="update" due-to="Dependabot">

+        Bump actions/checkout from 1 to 3, #44, #23, #48, #93, #75.

+      </action>

+      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">

+        Bump actions/cache from 2 to 3.0.3 #109.

+      </action>

+      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">

+        Bump actions/setup-java from 1.4.0 to 3 #40.

+      </action>

+      <action dev="ggregory" type="update" due-to="Dependabot">

+        Bump commons-parent from 50 to 53 #14, #113.

+      </action>

+      <action dev="ggregory" type="update" due-to="Dependabot">

+        Bump junit from 4.12 to 4.13.2 #16, #42, #58.

+      </action>

+      <action dev="ggregory" type="update" due-to="Dependabot">

+        Bump mockito-core from 3.2.4 to 5.5.1 #18, #21, #46, #53, #97, #103, #111, #116.

+      </action>

+      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">

+        Bump spotbugs-maven-plugin from 3.1.12.2 to 4.4.2, #17, #45, #52.

+      </action>

+      <action dev="ggregory" type="update" due-to="Gary Gregory">

+        Bump spotbugs from 3.1.12.2 to 4.2.3.

+      </action>

+      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">

+        Bump maven-checkstyle-plugin from 3.1.0 to 3.1.2 #56.

+      </action>

+      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">

+        Bump checkstyle from 8.28 to 8.35, #20.

+      </action>

+      <action dev="ggregory" type="update" due-to="Dependabot">

+        Bump checkstyle from 8.35 to 8.37 #47.

+      </action>

+      <action dev="ggregory" type="update" due-to="Gary Gregory">

+        Bump commons.japicmp.version 0.14.3 -> 0.15.2.

+      </action>

+      <action dev="ggregory" type="update" due-to="Gary Gregory">

+        Bump checkstyle from 8.37 to 9.3.

+      </action>

+    </release>

+    

+    <release version="1.7" date="2017-07-20" description="Bug fixes and separate column &amp; property handlers using SPI">

+      <action dev="sebb" type="update" issue="DBUTILS-117" due-to="Vadim Smirnov">

+        Error handling possible getParameterMetaData() results

+        - allow for null return

+        - handle SQLFeatureNotSupportedException

+      </action>

+      <action dev="britter" type="update" issue="DBUTILS-119" due-to="Michael Akerman">

+        Correct errors in BeanMapHandler Javadoc

+      </action>

+      <action dev="thecarlhall" type="add" issue="DBUTILS-121">

+        Add getWriteMethod to BeanProcessor to allow subclasses to influence which write method is used

+      </action>

+      <action dev="thecarlhall" type="fix" issue="DBUTILS-82" due-to="Kenshi Toriumi">

+        Change method contracts to allow extended class types when returning a bean populated from a query

+      </action>

+      <action dev="thecarlhall" type="fix" issue="DBUTILS-89" due-to="Adam Dyga">

+        Add method in BeanProcessor to populate an existing bean

+      </action>

+      <action dev="thecarlhall" type="fix" issue="DBUTILS-70" due-to="Michael Akerman">

+        Add ability to configure statements used in QueryRunner

+      </action>

+      <action dev="thecarlhall" type="add" issue="DBUTILS-50" due-to="Dan Fabulich">

+        Support CallableStatement "out" parameters

+      </action>

+      <action dev="thecarlhall" type="add" issue="DBUTILS-124">

+        Implement column and property handlers using Java's service interfaces.

+      </action>

+      <action dev="thecarlhall" type="update" issue="PR/1" due-to="Michael Hausegger">

+        Created some Unit Tests to increase code coverage.

+      </action>

+    </release>

+

+    <release version="1.6" date="2014-07-20" description="Bug fixes and addition of insert methods">

+      <action dev="britter" type="fix" issue="DBUTILS-110">

+        ArrayHandler should return an empty array when handle has no rows

+      </action>

+      <action dev="britter" type="fix" issue="DBUTILS-114" due-to="Michael Osipov">

+        Order of columns not retained in BasicRowProcessor with HashMap

+      </action>

+      <action dev="britter" type="fix" issue="DBUTILS-118" due-to="Feysal Rujbally, Daniele Cremonini">

+        BeanProcessor not returning nanoseconds

+      </action>

+      <action dev="britter" type="add" issue="DBUTILS-113" due-to="Graylin Kim, Michael Osipov">

+        Add support for conversion of ResultSet strings to enums in the BeanProcessor

+      </action>

+      <action dev="sebb" type="update" issue="DBUTILS-85">

+        In BeanProcessor#isCompatibleType, can Integer.class.isInstance(value) be replaced by value instanceof Integer (etc)?

+        Simplified code by using instanceof.

+      </action>

+      <action dev="sebb" due-to="Niall Pemberton" type="fix" issue="DBUTILS-106">

+        DBUtils can't build using JDK 1.7 - DriverProxy needs to implement getParentLogger()

+        Add dynamic invocation.

+      </action>

+      <action dev="wspeirs" due-to="Micah Huff" type="add" issue="DBUTILS-108">

+        Create functionality to return auto-generated keys in batches of SQL inserts

+      </action>

+      <action dev="wspeirs" due-to="PB" type="add" issue="DBUTILS-107">

+        Patch QueryLoader to also load from XML properties files

+      </action>

+      <action dev="wspeirs" due-to="xiaofei.xu" type="fix" issue="DBUTILS-100">

+        Updated the use of getColumnName to try getColumnLabel first

+      </action>

+      <action dev="simonetripodi" due-to="Moandji Ezana" type="add" issue="DBUTILS-98">

+        Add missing Javadoc to QueryRunner#insert

+      </action>

+      <action dev="simonetripodi" type="add" issue="DBUTILS-97">

+        Add an Abstract ResultSetHandler implementation in order to reduce redundant 'resultSet' variable invocation

+      </action>

+      <action dev="simonetripodi" due-to="yuyf" type="fix" issue="DBUTILS-96">

+        DbUtils#loadDriver(ClassLoader,String) makes DriverManager throwing "No suitable driver found for jdbc"

+        if ClassLoader is not the System's one

+      </action>

+      <action dev="wspeirs" due-to="Moandji Ezana" type="add" issue="DBUTILS-87">

+        Added insert methods to QueryRunner and AsyncQueryRunner that return the generated key.

+      </action>

+    </release>

+

+    <release version="1.5" date="2012-07-20" description="Bug fixes and addition of BeanMapHandler">

+      <action dev="simonetripodi" due-to="Benedikt Ritter" type="update" issue="DBUTILS-94">

+        Provide test coverage for org.apache.commons.dbutils.DbUtils

+      </action>

+      <action dev="simonetripodi" due-to="Stevo Slavic" type="fix" issue="DBUTILS-93">

+        Source assembly artifact fails to build a site because of missing pmd-ruleset.xml

+      </action>

+      <action dev="simonetripodi" due-to="Stevo Slavic" type="update" issue="DBUTILS-91">

+        Enhance BasicRowProcessor to have row mapping easier to configure

+      </action>

+      <action due-to="wspeirs" type="update">

+        Updated pom.xml: Java 1.6 now required, clirr and compiler plugin removed

+      </action>

+      <action due-to="Tiago Cavaleiro" dev="wspeirs" type="fix" issue="DBUTILS-84">

+        BeanProcessor method processColumn should take SQLXML in consideration

+      </action>

+      <action dev="wspeirs" type="update" issue="DBUTILS-77">

+        Updated documentation to better reflect the use of pmdKnownBroken

+      </action>

+      <action due-to="Sebb" type="fix" issue="DBUTILS-73">

+        Added a fixed Locale (Locale.ENGLISH) to all toLowerCase calls in BasicRowProcessor

+      </action>

+      <action due-to="Michael Osipov" type="add" issue="DBUTILS-67">

+        Added BeanMapHandler

+      </action>

+      <action due-to="Michael Osipov" type="update" issue="DBUTILS-66">

+        Added generics to ScalarHandler, ColumnHandler, and KeyedHandler

+      </action>

+    </release>

+

+    <release version="1.4" date="2011-10-23" description="Bug fixes and addition of asynchronous QueryLoader">

+      <action type="fix" issue="DBUTILS-81">

+        DbUtils.loadDriver() uses Class.forName()

+      </action>

+      <action type="fix" issue="DBUTILS-80">

+        DbUtils.loadDriver catches Throwable

+      </action>

+      <action type="fix" issue="DBUTILS-65">

+        Duplicate code introduced during Java 1.5 branch merge

+      </action>

+      <action type="fix" issue="DBUTILS-79">

+        fillStatement doesn't complain when there are too few parameters

+      </action>

+      <action type="update" issue="DBUTILS-75">

+        efficient usage from findbugs

+      </action>

+      <action dev="wspeirs" type="add" issue="DBUTILS-78">

+        Add asynchronous batch, query, and update calls

+      </action>

+    </release>

+

+    <release version="1.3" date="2009-11-04" description="Adds Java5 generics and varargs">

+      <action dev="dfabulich" type="add" issue="DBUTILS-48">

+        Java 1.5 generics and varargs

+      </action>

+      <action dev="dfabulich" type="update" issue="DBUTILS-57">

+        BeanProcessor#mapColumnsToProperties now prefers to use column labels over column names (where aliases are not set, these should be identical)

+      </action>

+      <action dev="dfabulich" type="update" issue="DBUTILS-58">

+        Setting pmdKnownBroken in QueryRunner constructor now completely ignores ParameterMetaData

+      </action>

+      <action dev="dfabulich" type="fix" issue="DBUTILS-60">

+        Fixed error message in QueryRunner#rethrow

+      </action>

+    </release>

+

+    <release version="1.2" date="2009-03-06" description="Another round of fixes; deprecates methods in preparation for varargs in java5">

+      <action dev="dfabulich" type="update" issue="DBUTILS-52">

+        Removed setDataSource method to guarantee thread safety

+      </action>

+      <action dev="sebb" type="update" issue="DBUTILS-51">

+        Made numerous private instance members final to guarantee thread safety; changed protected member of KeyedHandler to final

+      </action>

+      <action dev="bayard" type="remove">

+        Remove old Maven1/Ant build scripts

+      </action>

+      <action dev="dfabulich" type="update" issue="DBUTILS-29">

+        Support bean property to SQL IN parameter mapping

+      </action>

+      <action dev="dfabulich" type="fix" issue="DBUTILS-31">

+        fillStatement setNull bug with the Postgres/Derby JDBC driver (and others)

+      </action>

+      <action dev="dfabulich" type="update" issue="DBUTILS-33">

+        Make GenericListHandler (now AbstractListHandler) public

+      </action>

+      <action dev="dfabulich" type="update" issue="DBUTILS-34">

+        BasicRowProcessor loses any information on database field case

+      </action>

+      <action dev="dfabulich" type="update" issue="DBUTILS-37">

+        BeanListHandler#handle(ResultSet) is not optimal

+      </action>

+      <action dev="dfabulich" type="fix" issue="DBUTILS-40">

+        NullPointerException occured at rethrow method

+      </action>

+      <action dev="dfabulich" type="update" issue="DBUTILS-42">

+        Object with Long or Decimal got initial zero value while database field is null

+      </action>

+      <action dev="dennisl" type="update" issue="DBUTILS-38">

+        example documentation page, update query

+      </action>

+      <action dev="bayard" type="fix" issue="DBUTILS-36">

+        Add serialVersionUID to BasicRowProcessor.CaseInsensitiveHashMap

+      </action>

+    </release>

+

+    <release version="1.1" date="2006-12-01" description="Last couple of years of fixes">

+      <action dev="bayard" type="fix" issue="DBUTILS-32">

+        Tests fail to build under 1.6, and warning while compiling source

+      </action>

+      <action dev="bayard" type="fix" issue="DBUTILS-1">

+        BeanListHandler and BeanHandler fail to support java.sql.Date()

+      </action>

+      <action dev="bayard" type="update" issue="DBUTILS-16">

+        ResultSetRowProcessor abstract handler and some classes rework

+      </action>

+      <action dev="bayard" type="fix" issue="DBUTILS-3">

+        Setting bean properties fails silently

+      </action>

+      <action dev="dgraham" type="fix" issue="DBUTILS-9">

+        MockResultSet needs to handle equals and hashCode

+      </action>

+      <action dev="bayard" type="fix" issue="DBUTILS-7">

+        MockResultSet: Throw UnsupportedOperationException for not implemented methods

+      </action>

+      <action dev="dgraham" type="add" issue="DBUTILS-20">

+        Implement Pluggable Adaptors to Make BeanHandler Smarter

+      </action>

+      <action dev="dgraham" type="update" issue="DBUTILS-15">

+        Patch for extending BasicRowProcessor

+      </action>

+      <action dev="dgraham" type="add" issue="DBUTILS-12">

+        Protected QueryRunner.close() methods

+      </action>

+      <action dev="dgraham" type="update" issue="DBUTILS-23">

+        Updated docs for example.html page (select AS)

+      </action>

+      <action dev="dgraham" type="add" issue="DBUTILS-4">

+        Added protected ResultSetIterator.rethrow() method to wrap SQLExceptions in

+        RuntimeExceptions.

+      </action>

+      <action dev="dgraham" type="update" issue="DBUTILS-5">

+        Added SQLState and error code to rethrown SQLExceptions.

+      </action>

+      <action dev="dgraham" type="add" issue="DBUTILS-25">

+        Added KeyedHandler to create a Map of Maps from a ResultSet.

+      </action>

+      <action dev="dgraham" type="update" issue="DBUTILS-2">

+        Use current class' ClassLoader instead of QueryLoader's ClassLoader

+        in loadQueries().

+      </action>

+      <action dev="dgraham" type="update" issue="DBUTILS-22">

+        Made QueryLoader.loadQueries() protected so subclasses can use query

+        repositories other than properties files.

+      </action>

+      <action dev="dgraham" type="update">

+        QueryRunner now calls getDataSource() internally any time it needs access

+        to its DataSource object to allow subclasses to provide different behavior.

+      </action>

+      <action dev="dgraham" type="add">

+        Added DbUtils.rollbackAndClose() and DbUtils.rollbackAndCloseQuietly().

+      </action>

+      <action dev="dgraham" type="update" issue="DBUTILS-26">

+        Call ResultSet.getTimestamp() in BeanProcessor.processColumn() if

+        the bean property is a java.sql.Timestamp.  Oracle's getObject()

+        implementation returns its own incompatible Timestamp class.

+      </action>

+      <action dev="dgraham" type="update" issue="DBUTILS-18">

+        Changed QueryRunner.fillStatement() null handling

+        to use Types.VARCHAR instead of Types.OTHER.  This works for the

+        following tested drivers: Firebird 1.5/firebirdsql 1.5RC3,

+        Oracle 9/ Thin driver, MySQL 4.0/Msql Connecttor 3.0 and mm.mysql

+        2.0.4 MaxDB 7.5, HSQLDB 1.7.1, and MS Access/ODBC Bridge.

+      </action>

+      <action dev="dgraham" type="add" issue="DBUTILS-21">

+        Added a protected QueryRunner.prepareConnection() method to

+        allow subclasses to customize the Connections retrieved from

+        the DataSource before they're used.

+      </action>

+      <action dev="dgraham" type="add">

+        Refactored bean handling from BasicRowProcessor into new

+        BeanProcessor class.  This also fixes the common problem with

+        Oracle NUMERIC fields not being set into bean properties.

+      </action>

+      <action dev="dgraham" type="add" issue="DBUTILS-13">

+        Added QueryRunner.batch() methods for batch updates.

+      </action>

+      <action dev="dgraham" type="add" issue="DBUTILS-11">

+        Added new ResultSetHandler implementation, ColumnListHandler, that

+        converts one ResultSet column into a List of Objects.

+      </action>

+    </release>

+

+    <release version="1.0" date="2003-11-10" description="First release of DbUtils">

+      <action type="add">

+        This is the first release of the Commons DbUtils package.  DbUtils

+        is a small set of classes designed to make working with JDBC easier.

+      </action>

+      <action type="add">

+        QueryRunner class with ResultSetHandler interface allow you to easily query or

+        update a database and handle the ResultSet.  Several useful implementations

+        of the ResultSetHandler interface are located in the

+        org.apache.commons.dbutils.handlers.* package.

+      </action>

+      <action type="add">

+        ResultSet wrappers that decorate ResultSets with specialized

+        behavior.  See the classes in the org.apache.commons.dbutils.wrappers.*

+        package for details.

+      </action>

+      <action type="add">

+        Dynamic JDBC API interface implementations via the standard

+        java.lang.reflect.Proxy class.  This allows you to implement JDBC

+        interfaces such as ResultSet at runtime to avoid API version

+        incompatibilities.  See org.apache.commons.dbutils.ProxyFactory

+        for details.

+      </action>

+    </release>

+

+  </body>

+</document>