title: Derby INSERT SELECT null pointer exception
body: <p>I'm writing a Java application that's working with Apache Derby via JDBC. I'm having problems with the code in the following snippet:</p>
  
  <pre><code>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();
  </code></pre>
  
  <p>This inserts into the following tables:</p>
  
  <pre><code>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
  );
  </code></pre>
  
  <p>The idea is that there is an internal integer <code>job_id</code> which is used internally by the database, but we want to reference it as much as possible with the human-readable String <code>job_name</code></p>
  
  <p>This consistently throws the following exception.</p>
  
  <pre><code>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.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.&lt;init&gt;(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]
  </code></pre>
  
  <p>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. What am I doing wrong? The exact same prepared statement works fine with PostgreSQL.</p>
  
  <p>[edit]
  Derby.log:</p>
  
  <pre><code>----------------------------------------------------------------
  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$AppClassLoader@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.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.&lt;init&gt;(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$AppClassLoader@6d6f0472 
  ----------------------------------------------------------------
  </code></pre>
  
  <p>and unrolled exception:</p>
  
  <pre><code>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.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.&lt;init&gt;(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.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.&lt;init&gt;(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.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.&lt;init&gt;(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.&lt;init&gt;(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]
  </code></pre>