[ 
https://issues.apache.org/jira/browse/DERBY-4780?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Knut Anders Hatlen resolved DERBY-4780.
---------------------------------------

    Resolution: Duplicate

This looks like DERBY-4671. Resolving as a duplicate. The bug has been fixed in 
the source.

One possible workaround is to add a cast around the parameter in the select 
list of the inner query:

INSERT INTO input_files (job_ID, hash) SELECT job_id, CAST(? as CHAR(16) FOR 
BIT DATA) FROM job WHERE job_name = ?

> NullPointerException thrown when creating nested query
> ------------------------------------------------------
>
>                 Key: DERBY-4780
>                 URL: https://issues.apache.org/jira/browse/DERBY-4780
>             Project: Derby
>          Issue Type: Bug
>    Affects Versions: 10.6.1.0
>         Environment: Mac OS X 10.6.4, Java 1.6.0_20
>            Reporter: Scott Wilson
>
> I'm writing a Java application that's working with Embedded Apache Derby via 
> JDBC. I'm having problems with the code in the following snippet:
> byte md5[] = md5sum(file);
>     
> PreparedStatement s = con.prepareStatement("INSERT INTO input_files (job_ID, 
> hash) SELECT job_id, ? FROM job WHERE job_name = ?");
> s.setBytes(1, md5);
> s.setString(2, jobName);
> s.executeUpdate();
> s.close();
> This inserts into the following tables:
> CREATE TABLE input_files
> (
>     hash char(16) for bit data,
>     job_id integer REFERENCES job,
>     PRIMARY KEY(job_id, hash)
> );
> CREATE TABLE job
> (
>     job_id integer PRIMARY KEY GENERATED ALWAYS as IDENTITY,
>     job_name character varying(50) UNIQUE NOT NULL,
>     #other fields
> );
> The idea is that there is an internal integer `job_id` which is used 
> internally by the database, but we want to reference it as much as possible 
> with the human-readable String `job_name`
> This consistently throws the following exception.
>     java.sql.SQLException: Java exception: ': java.lang.NullPointerException'.
>         at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown 
> Source)
>         at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown 
> Source)
>         at org.apache.derby.impl.jdbc.Util.javaException(Unknown Source)
>         at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(UnknownSource)
>         at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown 
> Source)
>         at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown 
> Source)
>         at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown 
> Source)
>         at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown 
> Source)
>         at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown 
> Source)
>         at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown 
> Source)
>         at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.<init>(Unknown 
> Source)
>         at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Unknown 
> Source)
>         at 
> org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
>         at 
> org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
>         at [line 3 of snippet above]
> As you can see, this is thrown from the line where the prepared statement is 
> created - it doesn't get as far as executing it. I had assumed I was doing 
> something wrong, but a few people over at Stack Overflow ( 
> http://stackoverflow.com/questions/3503710/derby-insert-select-null-pointer-exception
>  ) reckon that this is a bug, at least in terms of what error is being 
> reported. For what it's worth, the exact same code works fine with PostgreSQL.
> Derby.log:
> ----------------------------------------------------------------
> 2010-08-18 08:47:08.779 GMT:
> Booting Derby version The Apache Software Foundation - Apache Derby - 
> 10.6.1.0 - (938214): instance a816c00e-012a-8461-611c-0000046700d0 
> on database directory /path/to/myDatabase   with class loader 
> sun.misc.launcher$appclassloa...@6d6f0472
> Database Class Loader started - derby.database.classpath=''
> 2010-08-18 08:47:12.067 GMT Thread[SwingWorker-pool-1-thread-1,5,main] (XID = 
> 316), (SESSIONID = 1), (DATABASE = myDatabase), (DRDAID = null), Cleanup 
> action starting
> 2010-08-18 08:47:12.067 GMT Thread[SwingWorker-pool-1-thread-1,5,main] (XID = 
> 316), (SESSIONID = 1), (DATABASE = myDatabase), (DRDAID = null), Failed 
> Statement is: INSERT INTO input_files (job_id, hash) SELECT job_id, ? FROM 
> job WHERE job_name = ?
> java.lang.NullPointerException
>       at org.apache.derby.impl.sql.compile.BitTypeCompiler.storable(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumn.checkStorableExpression(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumn.checkStorableExpression(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumnList.checkStorableExpressions(Unknown
>  Source)
>       at org.apache.derby.impl.sql.compile.InsertNode.bindStatement(Unknown 
> Source)
>       at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
>       at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
>       at 
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
>  Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.<init>(Unknown 
> Source)
>       at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
> Source)
>       at [line 3 of snippet]
> Cleanup action completed
> 2010-08-18 08:47:12.084 GMT:
> Shutting down instance a816c00e-012a-8461-611c-0000046700d0 with class loader 
> sun.misc.launcher$appclassloa...@6d6f0472 
> ----------------------------------------------------------------
> and unrolled exception:
> java.sql.SQLException: Java exception: ': java.lang.NullPointerException'.
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
>       at org.apache.derby.impl.jdbc.Util.javaException(Unknown Source)
>       at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown 
> Source)
>       at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.<init>(Unknown 
> Source)
>       at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
> Source)
>       at [line 3 of snippet above]
> Caused by: java.sql.SQLException: Java exception: ': 
> java.lang.NullPointerException'.
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown
>  Source)
>       ... 26 more
> Caused by: java.lang.NullPointerException
>       at org.apache.derby.impl.sql.compile.BitTypeCompiler.storable(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumn.checkStorableExpression(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumn.checkStorableExpression(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumnList.checkStorableExpressions(Unknown
>  Source)
>       at org.apache.derby.impl.sql.compile.InsertNode.bindStatement(Unknown 
> Source)
>       at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
>       at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
>       at 
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
>  Source)
>       ... 19 more
> SQLState: XJ001
> Error code: 0
> Message: Java exception: ': java.lang.NullPointerException'.
> Cause: java.sql.SQLException: Java exception: ': 
> java.lang.NullPointerException'.
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown
>  Source)
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
>       at org.apache.derby.impl.jdbc.Util.javaException(Unknown Source)
>       at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown 
> Source)
>       at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.<init>(Unknown 
> Source)
>       at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
> Source)
>       at [line 3 of snippet above]
> Caused by: java.lang.NullPointerException
>       at org.apache.derby.impl.sql.compile.BitTypeCompiler.storable(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumn.checkStorableExpression(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumn.checkStorableExpression(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumnList.checkStorableExpressions(Unknown
>  Source)
>       at org.apache.derby.impl.sql.compile.InsertNode.bindStatement(Unknown 
> Source)
>       at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
>       at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
>       at 
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
>  Source)
>       ... 19 more
> Cause:  java.lang.NullPointerException
>       at org.apache.derby.impl.sql.compile.BitTypeCompiler.storable(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumn.checkStorableExpression(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumn.checkStorableExpression(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.compile.ResultColumnList.checkStorableExpressions(Unknown
>  Source)
>       at org.apache.derby.impl.sql.compile.InsertNode.bindStatement(Unknown 
> Source)
>       at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
>       at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
>       at 
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
>  Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.<init>(Unknown 
> Source)
>       at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
> Source)
>       at [line 3 of snippet above]

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to