Can anyone else reproduce this?  If so, is this expected behavior?

On Jan 25, 4:32 pm, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote:
> Sorry!  I forgot to include a stack trace:
>
> java.sql.SQLException: wpfeature_universe_wpfuniv.id_wpfuniv may not
> be NULL
>         at org.sqlite.DB.execute(DB.java:236)
>         at org.sqlite.PrepStmt.execute(PrepStmt.java:59)
>         at
> com.thomson.care.utils.SqliteJdbcTest.testPreparedStatement(SqliteJdbcTest.java:
> 101)
>         at
> com.thomson.care.utils.SqliteJdbcTest.doesNotWork(SqliteJdbcTest.java:
> 75)
>
> $ java -version
> java version "1.6.0_03"
> Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
> Java HotSpot(TM) Client VM (build 1.6.0_03-b05, mixed mode, sharing)
>
> $
>
> I am using the Windows (3.5.4) release of the SQLiteJDBC drive.
> Thanks!
>
> On Jan 25, 2:52 pm, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote:
>
> > Hi there, everyone!
>
> > I would just like to report a problem we found.  The issue is
> > executing prepared statements that created -before- a schema change
> > but execute -after- the schema change.
>
> > Here's a JUnit test to show what I mean:
>
> > /**
> >  *
> >  */
> > package com.thomson.care.utils;
>
> > import java.io.File;
> > import java.sql.Connection;
> > import java.sql.DriverManager;
> > import java.sql.PreparedStatement;
> > import java.sql.ResultSet;
> > import java.sql.SQLException;
> > import java.sql.Statement;
>
> > import org.junit.After;
> > import org.junit.Assert;
> > import org.junit.Before;
> > import org.junit.Test;
>
> > /**
> >  * We found some strange behavior where executing a preparedstatement
> > after a
> >  * schema change caused a SQLException("KEY may not be null") to be
> > thrown
> >  *
> >  * This test tries to reproduce it
> >  *
> >  * @author u0066990
> >  *
> >  */
> > public class SqliteJdbcTest
> > {
> >     private static Connection conn;
>
> >     @Before
> >     public void beforeClass() throws ClassNotFoundException,
> > SQLException
> >     {
> >         new File( "test.db" ).delete();
> >         Class.forName( "org.sqlite.JDBC" );
> >         conn = getConnection();
> >     }
>
> >     private static Connection getConnection() throws SQLException
> >     {
> >         return DriverManager.getConnection( "jdbc:sqlite:test.db" );
> >     }
>
> >     @After
> >     public void afterClass() throws SQLException
> >     {
> >         if ( conn != null )
> >         {
> >             conn.close();
> >         }
> >         new File( "test.db" ).delete();
> >     }
>
> >     @Test
> >     public void doesWork() throws Exception
> >     {
> >         boolean changeSchema = false;
> >         testPreparedStatement( changeSchema );
> >     }
>
> >     private void verifyRowIsPresent() throws SQLException
> >     {
> >         final ResultSet rs =
> >             conn.createStatement().executeQuery(
> >                 "SELECT * from wpfeature_universe_wpfuniv" );
> >         rs.next();
> >         Assert.assertEquals( 1000, rs.getInt( 1 ) );
> >     }
>
> >     @Test
> >     public void doesNotWork() throws Exception
> >     {
> >         boolean changeSchema = true;
> >         testPreparedStatement( changeSchema );
>
> >     }
>
> >     private void testPreparedStatement( boolean changeSchema )
> >         throws SQLException
> >     {
> >         Statement stat = conn.createStatement();
> >         // create a new table
> >         final String sql =
> >             "CREATE TABLE  wpfeature_universe_wpfuniv ("
> >                 + "id_wpfuniv INTEGER NOT NULL" + ")";
> >         stat.executeUpdate( sql );
>
> >         // create a preparedstatement
> >         PreparedStatement prepSt =
> >             conn
> >                 .prepareStatement( "INSERT INTO
> > wpfeature_universe_wpfuniv (id_wpfuniv) VALUES(?)" );
>
> >         // change the schema
> >         if ( changeSchema )
> >         {
> >             conn.createStatement().executeUpdate(
> >                 "create table cats(name, napTime )" );
> >         }
> >         prepSt.setInt( 1, 1000 );
> >         prepSt.execute();
>
> >         // insert new row
> >         prepSt.executeUpdate();
> >         verifyRowIsPresent();
> >     }
>
> > }
>
> > Anyone have any thoughts?  Thanks!
--~--~---------~--~----~------------~-------~--~----~
Mailing List: http://groups.google.com/group/sqlitejdbc?hl=en
To unsubscribe, send email to [EMAIL PROTECTED]
-~----------~----~----~----~------~----~------~--~---

Reply via email to