db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Philip Ogren (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DERBY-4921) Statement.executeUpdate(String sql, String[] columnNames) throws ERROR X0X0F.S exception with EmbeddedDriver
Date Mon, 04 Feb 2013 14:50:13 GMT

    [ 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

Mime
View raw message