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

Philip Ogren commented on DERBY-4921:
-------------------------------------

If you change the client driver to behave as the embedded driver as you suggest 
above, then it will not be possible for my example code to work with both the 
Derby driver and the PostgreSQL driver without adding a driver-specific 
conditional.  Please note Knut's observation about PostgreSQL above.  It would 
be much preferable to me to see the embedded driver behave like the client 
driver because that will be much less likely break other people's code 
(including mine.)  
                
> 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

Reply via email to