@Test public void dblock() throws SQLException { stat.executeUpdate("create table test (c1);"); stat.executeUpdate("insert into test values (1);"); conn.prepareStatement("select * from test;").executeQuery().close(); stat.executeUpdate("drop table test;"); }
@Test public void batch() throws SQLException { ResultSet rs; stat.executeUpdate("create table test (c1, c2, c3, c4);"); PreparedStatement prep = conn.prepareStatement("insert into test values (?,?,?,?);"); for (int i = 0; i < 10; i++) { prep.setInt(1, Integer.MIN_VALUE + i); prep.setFloat(2, Float.MIN_VALUE + i); prep.setString(3, "Hello " + i); prep.setDouble(4, Double.MAX_VALUE + i); prep.addBatch(); } assertArrayEq(prep.executeBatch(), new int[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}); assertEquals(0, prep.executeBatch().length); prep.close(); rs = stat.executeQuery("select * from test;"); for (int i = 0; i < 10; i++) { assertTrue(rs.next()); assertEquals(Integer.MIN_VALUE + i, rs.getInt(1)); assertEquals(Float.MIN_VALUE + i, rs.getFloat(2)); assertEquals("Hello " + i, rs.getString(3)); assertEquals(Double.MAX_VALUE + i, rs.getDouble(4)); } rs.close(); stat.executeUpdate("drop table test;"); }
@Test public void multiUpdate() throws SQLException { stat.executeUpdate("create table test (c1);"); PreparedStatement prep = conn.prepareStatement("insert into test values (?);"); for (int i = 0; i < 10; i++) { prep.setInt(1, i); prep.executeUpdate(); prep.execute(); } prep.close(); stat.executeUpdate("drop table test;"); }
@Test public void retainKeysInBatch() throws SQLException { stat.executeUpdate("create table test (c1, c2);"); PreparedStatement prep = conn.prepareStatement("insert into test values (?, ?);"); prep.setInt(1, 10); prep.setString(2, "ten"); prep.addBatch(); prep.setInt(1, 100); prep.setString(2, "hundred"); prep.addBatch(); prep.setString(2, "one hundred"); prep.addBatch(); prep.setInt(1, 1000); prep.setString(2, "thousand"); prep.addBatch(); prep.executeBatch(); prep.close(); ResultSet rs = stat.executeQuery("select * from test;"); assertTrue(rs.next()); assertEquals(10, rs.getInt(1)); assertEquals("ten", rs.getString(2)); assertTrue(rs.next()); assertEquals(100, rs.getInt(1)); assertEquals("hundred", rs.getString(2)); assertTrue(rs.next()); assertEquals(100, rs.getInt(1)); assertEquals("one hundred", rs.getString(2)); assertTrue(rs.next()); assertEquals(1000, rs.getInt(1)); assertEquals("thousand", rs.getString(2)); assertFalse(rs.next()); rs.close(); }
@Test public void testFailedTransactionRollback() throws SQLException { connection.setAutoCommit(false); // Failed statement mockConnection.setError(42, "bad"); Statement s = connection.createStatement(); try { s.executeUpdate("DELETE bad"); fail("expected exception"); } catch (SQLException e) { } assertNull(mockConnection.lastFinish); // All future statements should also fail mockConnection.setUpdateCount(42); try { s.executeUpdate("DELETE good"); fail("expected exception"); } catch (SQLException e) { } connection.enableStrictMode(true); try { connection.commit(); fail("expected exception"); } catch (SQLException e) { } // rollback this transaction connection.rollback(); assertNull(mockConnection.lastFinish); try { // Can't rollback: no transaction! connection.rollback(); fail("expected exception"); } catch (SQLException e) { } assertEquals(42, s.executeUpdate("DELETE good")); }
@Test public void createEncrypted() throws SQLException, IOException { File tmp = File.createTempFile("sqlitetest", ".db"); tmp.deleteOnExit(); String url = "jdbc:sqlite:" + tmp.getAbsolutePath(); Properties props = new Properties(); final String password = "******"dog"; props.put("key", password); Connection conn = DriverManager.getConnection(url, props); conn.setAutoCommit(false); Statement st = conn.createStatement(); st.executeUpdate("create table ants (col int)"); st.executeUpdate("insert into ants values( 300 )"); st.executeUpdate("insert into ants values( 400 )"); st.close(); conn.commit(); conn.close(); // Try reading without key. props.remove("key"); conn = DriverManager.getConnection(url, props); try { st = conn.createStatement(); ResultSet rs = st.executeQuery("select count(*) from ants"); fail("Database not encrypted."); } catch (SQLException ignore) { } conn.close(); props.put("key", password); conn = DriverManager.getConnection(url, props); st = conn.createStatement(); ResultSet rs = st.executeQuery("select count(*) from ants"); assertTrue(rs.next()); assertEquals(2, rs.getInt(1)); conn.close(); }
void initWithTestData(final ConnectionManager connectionManager) { createSchema(connectionManager); Connection connection = null; Statement statement = null; try { connection = connectionManager.getConnection(null); statement = connection.createStatement(); assertEquals(statement.executeUpdate("INSERT INTO " + TABLE_NAME + " values (1, 'abs')"), 1); assertEquals(statement.executeUpdate("INSERT INTO " + TABLE_NAME + " values (1, 'gps')"), 1); assertEquals( statement.executeUpdate("INSERT INTO " + TABLE_NAME + " values (2, 'airbags')"), 1); assertEquals(statement.executeUpdate("INSERT INTO " + TABLE_NAME + " values (3, 'abs')"), 1); } catch (Exception e) { throw new IllegalStateException("Unable to initialize test database", e); } finally { DBUtils.closeQuietly(connection); DBUtils.closeQuietly(statement); } }
void createSchema(final ConnectionManager connectionManager) { Connection connection = null; Statement statement = null; try { connection = connectionManager.getConnection(null); statement = connection.createStatement(); assertEquals( statement.executeUpdate( "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (objectKey INTEGER, value TEXT)"), 0); assertEquals( statement.executeUpdate( "CREATE INDEX IF NOT EXISTS " + INDEX_NAME + " ON " + TABLE_NAME + "(value)"), 0); } catch (Exception e) { throw new IllegalStateException("Unable to create test database schema", e); } finally { DBUtils.closeQuietly(connection); DBUtils.closeQuietly(statement); } }
@Test public void batchOneParam() throws SQLException { stat.executeUpdate("create table test (c1);"); PreparedStatement prep = conn.prepareStatement("insert into test values (?);"); for (int i = 0; i < 10; i++) { prep.setInt(1, Integer.MIN_VALUE + i); prep.addBatch(); } assertArrayEq(prep.executeBatch(), new int[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}); prep.close(); ResultSet rs = stat.executeQuery("select count(*) from test;"); assertTrue(rs.next()); assertEquals(10, rs.getInt(1)); rs.close(); }
@Test public void testDeadlockTransactionRollback() throws SQLException { connection.setAutoCommit(false); // Failed statement mockConnection.setError(Jdbc.ErrorCode.DEADLOCK.getNumber(), "deadlock"); Statement s = connection.createStatement(); try { s.executeUpdate("DELETE bad"); fail("expected exception"); } catch (SQLException e) { assertEquals(Jdbc.ErrorCode.DEADLOCK.getNumber(), e.getErrorCode()); assertEquals("40001", e.getSQLState()); } assertNull(mockConnection.lastFinish); }
@Test public void insert1000() throws SQLException { stat.executeUpdate("create table in1000 (a);"); PreparedStatement prep = conn.prepareStatement("insert into in1000 values (?);"); conn.setAutoCommit(false); for (int i = 0; i < 1000; i++) { prep.setInt(1, i); prep.executeUpdate(); } conn.commit(); ResultSet rs = stat.executeQuery("select count(a) from in1000;"); assertTrue(rs.next()); assertEquals(1000, rs.getInt(1)); rs.close(); }
@Ignore @Test public void getObject() throws SQLException { stat.executeUpdate( "create table testobj (" + "c1 integer, c2 float, c3, c4 varchar, c5 bit, c6, c7);"); PreparedStatement prep = conn.prepareStatement("insert into testobj values (?,?,?,?,?,?,?);"); prep.setInt(1, Integer.MAX_VALUE); prep.setFloat(2, Float.MAX_VALUE); prep.setDouble(3, Double.MAX_VALUE); prep.setLong(4, Long.MAX_VALUE); prep.setBoolean(5, false); prep.setByte(6, (byte) 7); prep.setBytes(7, b1); prep.executeUpdate(); ResultSet rs = stat.executeQuery("select c1,c2,c3,c4,c5,c6,c7 from testobj;"); assertTrue(rs.next()); assertEquals(Integer.MAX_VALUE, rs.getInt(1)); assertEquals(Integer.MAX_VALUE, (int) rs.getLong(1)); assertEquals(Float.MAX_VALUE, rs.getFloat(2)); assertEquals(Double.MAX_VALUE, rs.getDouble(3)); assertEquals(Long.MAX_VALUE, rs.getLong(4)); assertFalse(rs.getBoolean(5)); assertEquals((byte) 7, rs.getByte(6)); assertArrayEq(rs.getBytes(7), b1); assertNotNull(rs.getObject(1)); assertNotNull(rs.getObject(2)); assertNotNull(rs.getObject(3)); assertNotNull(rs.getObject(4)); assertNotNull(rs.getObject(5)); assertNotNull(rs.getObject(6)); assertNotNull(rs.getObject(7)); assertTrue(rs.getObject(1) instanceof Integer); assertTrue(rs.getObject(2) instanceof Double); assertTrue(rs.getObject(3) instanceof Double); assertTrue(rs.getObject(4) instanceof String); assertTrue(rs.getObject(5) instanceof Integer); assertTrue(rs.getObject(6) instanceof Integer); assertTrue(rs.getObject(7) instanceof byte[]); rs.close(); }