db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Oded Arbel (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DERBY-6952) Regression on Statement.getGeneratedKeys() on UPDATE statements
Date Thu, 20 Jul 2017 15:15:00 GMT

    [ https://issues.apache.org/jira/browse/DERBY-6952?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16094806#comment-16094806
] 

Oded Arbel commented on DERBY-6952:
-----------------------------------

According to the documentation for 10.13 [here|http://db.apache.org/derby//docs/10.13/ref/crefjavstateautogen.html],
`getGeneratedKeys()` should return values for the first row of either an INSERT or an UPDATE
statement - though it is unclear on what values will be returned for an UPDATE statement.

> Regression on Statement.getGeneratedKeys() on UPDATE statements
> ---------------------------------------------------------------
>
>                 Key: DERBY-6952
>                 URL: https://issues.apache.org/jira/browse/DERBY-6952
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.13.1.1
>            Reporter: Lukas Eder
>
> Consider this program:
> {code}
> import java.sql.Connection;
> import java.sql.PreparedStatement;
> import java.sql.ResultSet;
> import java.sql.Statement;
> import java.util.Properties;
> import org.apache.derby.jdbc.EmbeddedDriver;
> public class Derby {
>     public static void main(String[] args) throws Exception {
>         try (Connection c1 = new EmbeddedDriver().connect("jdbc:derby:memory:test;create=true",
new Properties());
>              Statement s = c1.createStatement()) {
>             s.execute(
>                 "CREATE TABLE test ("
>                     + "id INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY,"
>                     + "val INT)");
>             try {
>                 s.executeUpdate("INSERT INTO test (val) VALUES (1)");
>                 try (PreparedStatement p = c1.prepareStatement("UPDATE test SET val =
2 WHERE id = 1", Statement.RETURN_GENERATED_KEYS)) {
>                     p.executeUpdate();
>                     try (ResultSet rs = p.getGeneratedKeys()) {
>                         while (rs.next())
>                             System.out.println(rs.getString(1));
>                     }
>                 }
>             }
>             finally {
>                 s.execute("DROP TABLE test");
>             }
>         }
>     }
> }
> {code}
> Running this with Derby version 10.12.1.1 yields
> 1
> With 10.13.1.1, it yields:
> 0
> I'm not sure if this is (supposed to be) working at all, but the change is certainly
a bit confusing.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message