Issue Details (XML | Word | Printable)

Key: DBUTILS-44
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Unassigned
Reporter: Julien Aymé
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Commons DbUtils

QueryRunner#fillStatement setNull all database fix proposal

Created: 01/Feb/08 10:56 AM   Updated: 07/Mar/09 06:01 AM
Component/s: None
Affects Version/s: 1.1
Fix Version/s: None

Time Tracking:
Not Specified

File Attachments:
  Size
Java Source File Licensed for inclusion in ASF works QueryRunnerSQLParam.java 2008-02-01 10:58 AM Julien Aymé 19 kB
Java Source File Licensed for inclusion in ASF works SQLParam.java 2008-02-01 10:58 AM Julien Aymé 0.5 kB
Java Source File Licensed for inclusion in ASF works SQLParamBuilder.java 2008-02-01 11:01 AM Julien Aymé 8 kB
Java Source File Licensed for inclusion in ASF works SQLParamImpl.java 2008-02-01 11:01 AM Julien Aymé 4 kB

Resolution Date: 25/Feb/09 10:02 AM


 Description  « Hide
There is currently many open issues ( DBUTILS-14, DBUTILS-31, DBUTILS-39 and DBUTILS-41) concerning the problem with setNull(i+1, Types.VARCHAR) in the QueryRunner#fillStatement method when the given object is null.

I use Commons DbUtils in several projects, and I have found a workaround which works for any database:
The problem is that when the object is null, the API does not know to which SQL TYPE it should map the object to.

I've added an Interface, named SQLParam, which exactely resolve this problem:

public interface SQLParam {
    /**
     * Returns the object
     * 
     * @return the object
     */
    public Object getObject();

    /**
     * Returns the SQL type of the object,
     * must be one of {@link java.sql.Types}
     * 
     * @return the type of the object
     * @see java.sql.Types
     */
    public int getType();
}

Then I've changed the QueryRunner API, by replacing all Object param and Object[] params by SQLParam param and SQLParam[] params (in a new QueryRunnerSQLParam class).

It does work just well for me; any comments gladly appreciated.



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Julien Aymé added a comment - 01/Feb/08 10:58 AM
Attached SQLParam interface, and the modified QueryRunner class (QueryRunnerSQLParam)

Julien Aymé added a comment - 01/Feb/08 11:01 AM
Attached default implementation of SQLParam (SQLParamImpl), and a facility builder class (similar to Lang builders: SQLParamBuilder)

Henri Yandell added a comment - 25/Feb/09 10:02 AM
svn ci -m "Merging in Dab Fabulich's work on https://svn.apache.org/repos/asf/commons/sandbox/dbutils/bugfixing from -r741987:747723. Resolving DBUTILS-34 - DBUTILS-37 - DBUTILS-29 - DBUTILS-14 - DBUTILS-31 - DBUTILS-39 - DBUTILS-41 - DBUTILS-44 - DBUTILS-33 - DBUTILS-42 - DBUTILS-40"

Sending pom.xml
Sending src/java/org/apache/commons/dbutils/BasicRowProcessor.java
Sending src/java/org/apache/commons/dbutils/BeanProcessor.java
Sending src/java/org/apache/commons/dbutils/QueryRunner.java
Adding src/java/org/apache/commons/dbutils/handlers/AbstractListHandler.java
Sending src/java/org/apache/commons/dbutils/handlers/ArrayListHandler.java
Sending src/java/org/apache/commons/dbutils/handlers/BeanListHandler.java
Sending src/java/org/apache/commons/dbutils/handlers/ColumnListHandler.java
Deleting src/java/org/apache/commons/dbutils/handlers/GenericListHandler.java
Sending src/java/org/apache/commons/dbutils/handlers/MapListHandler.java
Sending src/test/org/apache/commons/dbutils/BaseTestCase.java
Adding src/test/org/apache/commons/dbutils/QueryRunnerTest.java
Transmitting file data .........
Committed revision 747724.


Dan Fabulich added a comment - 07/Mar/09 06:01 AM
Removing "Fix Version: 1.2" since this is really a dupe; it clutters the release notes.