commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Julien Aymé (JIRA) <j...@apache.org>
Subject [jira] Commented: (DBUTILS-54) Generated key handling for updates
Date Thu, 05 Nov 2009 12:31:32 GMT

    [ https://issues.apache.org/jira/browse/DBUTILS-54?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12773917#action_12773917
] 

Julien Aymé commented on DBUTILS-54:
------------------------------------

Note that the proposed GenKeyQueryRunner patch looses the thread safety of QueryRunner (due
to the field generatedKeys used to store the generated keys within the update method).
The new GenKeyQueryRunner is indeed statefull, while QueryRunner was stateless (except for
the pmdKnownBroken volatile field).

> Generated key handling for updates
> ----------------------------------
>
>                 Key: DBUTILS-54
>                 URL: https://issues.apache.org/jira/browse/DBUTILS-54
>             Project: Commons DbUtils
>          Issue Type: Improvement
>    Affects Versions: 1.2, Nightly Builds
>            Reporter: Michael V
>            Priority: Minor
>         Attachments: GeneratedKeysHandler.java, GenKeyQueryRunner.java, GenKeyQueryRunner.java,
QueryRunner.patch
>
>
> It would be great (and fairly easy to do) to provide a way to get autogenerated keys
from QueryRunner.update. There was an email thread about this in 2004 but it seems it never
was actually implemented.
> http://mail-archives.apache.org/mod_mbox/commons-dev/200406.mbox/%3C20040602024627.21604.qmail@web50606.mail.yahoo.com%3E
> The thought is to provide an ability to recover generated keys, for instance by providing
a result set handler, in which case prepared statement would be generated with RETURN_GENERATED_KEYS
and getGeneratedKeys() would be passed to the result handler.
> It seems that in 1.2 there is a way to get PreparedStatement and work with QueryRunner
more as a support to JDBC but IMO it would be cool to add this feature.
> example solution:
> {noformat} 
>     public int update(Connection conn, String sql, Object... params)
>         throws SQLException {
>           update(sql, null, params);
>     }
>     protected PreparedStatement prepareStatement(Connection conn, String sql, int autoGeneratedKeys)
>         throws SQLException {
>         return conn.prepareStatement(sql, autoGeneratedKeys);
>     }
>     public int update(Connection conn, String sql, ResultSetHandler<?> rsh, Object...
params)
>         throws SQLException {
>         PreparedStatement stmt = null;
>         int rows = 0;
>         try {
>             stmt = this.prepareStatement(conn, sql, rsh==null?Statement.NO_GENERATED_KEY:Statement.RETURN_GENERATED_KEYS);
>             this.fillStatement(stmt, params);
>             rows = stmt.executeUpdate();
>             if(rsh!=null)
>                  rsh.handle(stmt.getGeneratedKeys());
>         } catch (SQLException e) {
>             this.rethrow(e, sql, params);
>         } finally {
>             close(stmt);
>         }
>         return rows;
>     }
> {noformat} 
> Thanks!

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message