[ https://issues.apache.org/jira/browse/DERBY-4921?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13569724#comment-13569724 ]
Dag H. Wanvik commented on DERBY-4921: -------------------------------------- Quote from DERBY-2653: ""The driver will ignore the array if the SQL statement is not an INSERT statement, or an SQL statement able to return auto-generated keys (the list of such statements is vendor-specific)." https://issues.apache.org/jira/browse/DERBY-2653?focusedCommentId=12569412&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-12569412 > 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