[ 
https://issues.apache.org/jira/browse/DBUTILS-54?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michael V updated DBUTILS-54:
-----------------------------

    Description: 
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/%[email protected]%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!

  was:
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/%[email protected]%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<T> 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!


> 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
>
> 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/%[email protected]%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.

Reply via email to