You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Philip Ogren (JIRA)" <ji...@apache.org> on 2013/02/01 23:52:12 UTC
[jira] [Commented] (DERBY-4921) Statement.executeUpdate(String sql,
String[] columnNames) throws ERROR X0X0F.S exception with EmbeddedDriver
[ https://issues.apache.org/jira/browse/DERBY-4921?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13569193#comment-13569193 ]
Philip Ogren commented on DERBY-4921:
-------------------------------------
I would like to challenge the decision to close this issue. I was really confused about why I was seeing this behavior today even after finding and reading through this issue because I had never seen it before. I finally realized that it was because the behavior between the EmbeddedDriver and ClientDriver differs on this exact point and I had always used the client driver on my code in question. I think it is one thing to throw up your hands because the spec is vague (and even still, it seems obvious to me that this is a bug) but I think it is not really defensible to have the two drivers behave differently. Please reopen and fix!
> Statement.executeUpdate(String sql, String[] columnNames) throws ERROR X0X0F.S exception with EmbeddedDriver
> --------------------------------------------------------------------------------------------------------------
>
> Key: DERBY-4921
> URL: https://issues.apache.org/jira/browse/DERBY-4921
> Project: Derby
> Issue Type: Bug
> Components: JDBC
> Affects Versions: 10.6.2.1
> Reporter: Jarek Przygódzki
>
> Statement.executeUpdate(insertSql, int[] columnIndexes) and Statement/executeUpdate(insertSql,Statement.RETURN_GENERATED_KEYS) does work, Statement.executeUpdate(String sql, String[] columnNames) doesn't.
> Test program
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.Statement;
> public class GetGeneratedKeysTest {
> static String createTableSql = "CREATE TABLE tbl (id integer primary key generated always as identity, name varchar(200))";
> static String insertSql = "INSERT INTO tbl(name) values('value')";
> static String driver = "org.apache.derby.jdbc.EmbeddedDriver";
> static String[] idColName = { "id" };
> public static void main(String[] args) throws Exception {
> Class.forName(driver);
> Connection conn = DriverManager
> .getConnection("jdbc:derby:testDb;create=true");
> conn.setAutoCommit(false);
> Statement stmt = conn.createStatement();
> ResultSet rs;
> stmt.executeUpdate(createTableSql);
> stmt.executeUpdate(insertSql, idColName);
> rs = stmt.getGeneratedKeys();
> if (rs.next()) {
> int id = rs.getInt(1);
> }
> conn.commit();
> }
> }
> Result
> Exception in thread "main" java.sql.SQLException: Table 'TBL' does not have an auto-generated column named 'id'.
> at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:95)
> at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Util.java:256)
> at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:391)
> at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:346)
> at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2269)
> at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:81)
> at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1321)
> at org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:625)
> at org.apache.derby.impl.jdbc.EmbedStatement.executeUpdate(EmbedStatement.java:246)
> at GetGeneratedKeysTest.main(GetGeneratedKeysTest.java:23)
> Caused by: java.sql.SQLException: Table 'TBL' does not have an auto-generated column named 'id'.
> at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45)
> at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory40.java:119)
> at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:70)
> ... 9 more
> Caused by: ERROR X0X0F: Table 'TBL' does not have an auto-generated column named 'id'.
> at org.apache.derby.iapi.error.StandardException.newException(StandardException.java:303)
> at org.apache.derby.impl.sql.execute.InsertResultSet.verifyAutoGeneratedColumnsNames(InsertResultSet.java:689)
> at org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:419)
> at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:436)
> at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:317)
> at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1232)
> ... 3 more
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira