db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dag H. Wanvik (Issue Comment Edited) (JIRA)" <j...@apache.org>
Subject [jira] [Issue Comment Edited] (DERBY-4921) Statement.executeUpdate(String sql, String[] columnNames) throws ERROR X0X0F.S exception with EmbeddedDriver
Date Thu, 22 Dec 2011 02:41:30 GMT

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

Dag H. Wanvik edited comment on DERBY-4921 at 12/22/11 2:40 AM:
----------------------------------------------------------------

I agree this is not intuitive. It would be better I think, if for all the JDBC API methods
that take column names, names were case folded to the internal canonical form (upper cased
as per the SQL standard) unless quoted. There has been discussions about this in the past,
not sure why it was never changed.

                
      was (Author: dagw):
    I agree this is not intuitive. It would be better I think, if all the JDBC API methods
that take column names were case folded to the internal canonical form (upper cased as per
the SQL standard) unless quoted. There has been discussions about this in the past, not sure
why it was never changed.

                  
> 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: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

Mime
View raw message