db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stephen Kestle (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DERBY-4921) Statement.executeUpdate(String sql, String[] columnNames) throws ERROR X0X0F.S exception with EmbeddedDriver
Date Wed, 21 Dec 2011 21:45:30 GMT

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

Stephen Kestle commented on DERBY-4921:

I would think this is *not* expected behaviour. The only other case sensitive database I know
is Oracle, and it is case insensitive unless you explicitly make it case sensitive by quoting
the column. A collegue of mine has spent 2 days trying to get derby working with hibernate
for unit tests, and you should know that it seems to be impossible to fix this issue without
changing the mapping files (which are loath to change since they are actually deployed).

Even if we quote all the columns, hibernate complains that it can't find "UNIQUEID" (if we
don't quote, hibernate can't execute an update with "uniqueId").

Regardless of whether it's derby, or hibernate, or some of our own JDBC code, this is just
far too much work to have to try and figure out when _it's not expected_.

P.S. {quote}I believe this is the expected behaviour.{quote}
Really? I could understand a developer saying this, are there any users (of derby==general
developers) that would actually expect this?
> 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:
>            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: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira


View raw message