blob: 0edee1c67c17a0fac845c581323db744bf64dc8d [file] [log] [blame]
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package libcore.java.sql;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.Savepoint;
import java.sql.Statement;
public final class OldConnectionTest extends OldSQLTest {
public void testCreateStatement() throws SQLException {
Statement statement = conn.createStatement();
assertNotNull(statement);
//check default values
assertEquals(ResultSet.FETCH_UNKNOWN, statement.getFetchDirection());
assertNull(statement.getWarnings());
assertTrue(statement.getQueryTimeout() > 0);
try {
conn.close();
statement.executeQuery("select * from zoo");
fail("SQLException is not thrown after close");
} catch (SQLException e) {
// expected
}
}
// Scrolling on a forward only RS not allowed. conn.close() does not wrap up
public void testCreateStatement_int_int() throws SQLException {
Statement st = null;
ResultSet rs = null;
// test read only
try {
st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
st.execute("select id, name from zoo");
rs = st.getResultSet();
try {
rs.deleteRow();
fail("Could delete row for READ_ONLY ResultSet");
} catch (SQLException sqle) {
// expected
}
} finally {
try {
rs.close();
st.close();
} catch (Exception ee) {
}
}
// test forward only: scrolling not allowed
try {
st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
st.execute("select id, name from zoo");
rs = st.getResultSet();
try {
rs.absolute(1);
rs.previous();
fail("Could scroll backwards");
} catch (SQLException sqle) {
// expected
}
} finally {
try {
rs.close();
st.close();
} catch (Exception ee) {
}
}
// test forward only
try {
st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
st.execute("select id, name from zoo");
rs = st.getResultSet();
try {
rs.last();
rs.first();
fail("Could scroll backwards");
} catch (SQLException sqle) {
// expected
}
} finally {
try {
rs.close();
st.close();
} catch (Exception ee) {
}
}
// test updating ResultSets
try {
st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
st.execute("select name, family from zoo");
rs = st.getResultSet();
try {
rs.insertRow();
rs.updateObject("family", "bird");
rs.next();
rs.previous();
assertEquals("parrot", (rs.getString(1)));
fail("SQLException was not thrown");
} catch (SQLException sqle) {
// expected
}
} finally {
try {
rs.close();
st.close();
} catch (Exception ee) {
}
}
try {
st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
st.execute("select name, family from zoo");
rs = st.getResultSet();
try {
rs.insertRow();
rs.updateObject("family", "bird");
rs.next();
rs.previous();
assertEquals("bird", (rs.getString(1)));
fail("SQLException was not thrown");
} catch (SQLException sqle) {
// expected
}
} finally {
try {
rs.close();
st.close();
} catch (Exception ee) {
}
}
conn.close();
try {
// exception is not specified for this case
conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, -1);
fail("Illigal arguments: should return exception.");
} catch (SQLException sqle) {
// expected
}
try {
// exception is not specified for this case
conn.createStatement(Integer.MIN_VALUE, ResultSet.CONCUR_READ_ONLY);
fail("Illigal arguments: should return exception.");
} catch (SQLException sqle) {
// expected
}
}
public void testCreateStatement_int_int_int() throws SQLException {
Statement st = null;
try {
assertNotNull(conn);
st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY,
ResultSet.HOLD_CURSORS_OVER_COMMIT);
assertNotNull(st);
st.execute("select id, name from zoo");
ResultSet rs = st.getResultSet();
rs.next();
int pos = rs.getRow();
conn.commit();
assertEquals("ResultSet cursor position has changed",pos, rs.getRow());
rs.close();
} finally {
try {
if (st != null) st.close();
} catch (SQLException ee) {
}
}
try {
conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY, -100);
fail("SQLException was not thrown");
} catch (SQLException sqle) {
//ok
}
}
// known failure: not supported
public void testCreateStatementIntIntIntNotSupported() throws SQLException {
Statement st = null;
try {
st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY,
ResultSet.CLOSE_CURSORS_AT_COMMIT);
assertNotNull(st);
st.execute("select id, name from zoo");
ResultSet rs = st.getResultSet();
try {
rs.close();
fail("SQLException was not thrown");
} catch (SQLException sqle) {
// expected
}
} finally {
if (st != null) {
try {
st.close();
} catch (SQLException ee) {
}
}
}
}
// conn.close() does not wrap up
public void testGetMetaData() throws SQLException {
DatabaseMetaData md = conn.getMetaData();
Connection con = md.getConnection();
assertEquals(conn, con);
conn.close();
try {
conn.getMetaData();
fail("Exception expected");
} catch (SQLException e) {
//ok
}
}
// TODO clearWarnings is not supported
public void testClearWarnings() throws Exception {
SQLWarning w = conn.getWarnings();
assertNull(w);
Statement st = null;
try {
st = conn.createStatement();
st.execute("select animals from zoo");
fail("SQLException was not thrown");
} catch (SQLException e) {
assertNotNull(conn.getWarnings());
} finally {
try {
st.close();
} catch (SQLException ee) {
}
}
conn.clearWarnings();
w = conn.getWarnings();
assertNull(w);
try {
st = conn.createStatement();
st.execute("select monkey from zoo");
fail("SQLException was not thrown");
} catch (SQLException e) {
assertEquals("SQLite.Exception: error in prepare/compile",e.getMessage());
} finally {
try {
st.close();
} catch (SQLException ee) {
}
}
//Test for correct functionality
w = conn.getWarnings();
assertNotNull(w);
conn.close();
try {
conn.clearWarnings();
fail("Exception expected");
} catch (SQLException e) {
//ok
}
}
// TODO GetWarnings is not supported: returns null
public void testGetWarnings() throws Exception {
Statement st = null;
int errorCode1 = -1;
int errorCode2 = -1;
try {
st = conn.createStatement();
st.execute("select animals from zoooo");
fail("SQLException was not thrown");
} catch (SQLException e) {
// expected
errorCode1 = e.getErrorCode();
}
SQLWarning wrs = conn.getWarnings();
assertNull(wrs);
// tests implementation: but errorcodes need to change too -> change impl.
/*
Statement st = null;
int errorCode1 = -1;
int errorCode2 = -1;
try {
st = conn.createStatement();
st.execute("select animals from zoooo");
fail("SQLException was not thrown");
} catch (SQLException e) {
// expected
errorCode1 = e.getErrorCode();
}
try {
SQLWarning wrs = conn.getWarnings();
assertNotNull(wrs);
assertEquals(errorCode1, wrs.getErrorCode());
assertNull(wrs.getNextWarning());
} catch (Exception e) {
fail("Unexpected Exception: " + e.getMessage());
}
try {
st.execute("select horse from zoooooo");
} catch (SQLException e) {
// expected
errorCode2 = e.getErrorCode();
}
try {
SQLWarning wrs = conn.getWarnings();
assertEquals(errorCode1, wrs.getErrorCode());
assertNotNull(wrs.getNextWarning());
assertEquals(errorCode2, wrs.getErrorCode());
} catch (Exception e) {
fail("Unexpected Exception: " + e.getMessage());
}
try {
st.close();
} catch (SQLException ee) {
}
*/
conn.close();
try {
conn.getWarnings();
fail("Exception expected");
} catch (SQLException e) {
//ok
}
}
public void testGetAutoCommit() throws SQLException {
conn.setAutoCommit(true);
assertTrue(conn.getAutoCommit());
conn.setAutoCommit(false);
assertFalse(conn.getAutoCommit());
conn.setAutoCommit(true);
assertTrue(conn.getAutoCommit());
}
// conn.close() does not wrap up
public void testSetAutoCommit() throws SQLException {
Statement st = null;
ResultSet rs = null;
ResultSet rs1 = null;
try {
conn.setAutoCommit(true);
st = conn.createStatement();
st.execute("insert into zoo (id, name, family) values (3, 'Chichichi', 'monkey');");
conn.commit();
} catch (SQLException e) {
//ok
} finally {
try {
st.close();
} catch (SQLException ee) {
}
}
// even though exception was thrown value is committed
try {
st = conn.createStatement();
st.execute("select * from zoo");
rs = st.getResultSet();
assertEquals(3, getCount(rs));
} finally {
try {
st.close();
} catch (SQLException ee) {
}
}
try {
conn.setAutoCommit(false);
st = conn.createStatement();
st.execute("insert into zoo (id, name, family) values (4, 'Burenka', 'cow');");
st.execute("select * from zoo");
rs = st.getResultSet();
assertEquals(4, getCount(rs));
conn.commit();
// Check cursors closed after commit
rs1 = st.getResultSet();
assertEquals(0, getCount(rs1));
} finally {
try {
rs.close();
rs1.close();
st.close();
} catch (SQLException ee) {
}
}
conn.close();
try {
conn.setAutoCommit(true);
fail("Exception expected");
} catch (SQLException e) {
//ok
}
}
// conn.close() does not wrap up
public void testIsReadOnly() throws SQLException {
conn.setReadOnly(true);
assertTrue(conn.isReadOnly());
conn.setReadOnly(false);
assertFalse(conn.isReadOnly());
conn.close();
try {
conn.isReadOnly();
fail("Exception expected");
} catch (SQLException e) {
//ok
}
}
// not supported
public void testSetReadOnly() throws SQLException {
// Pseudo test: not supported test
Statement st = null;
try {
conn.setReadOnly(true);
st = conn.createStatement();
st.execute("insert into zoo (id, name, family) values (3, 'ChiChiChi', 'monkey');");
// fail("SQLException is not thrown");
} finally {
try {
st.close();
} catch (SQLException ee) {
}
}
// test for correct implementation
st = null;
try {
conn.setReadOnly(true);
st = conn.createStatement();
st.execute("insert into zoo (id, name, family) values (3, 'ChiChiChi', 'monkey');");
fail("SQLException is not thrown");
} catch (SQLException sqle) {
// expected
} finally {
try {
st.close();
} catch (SQLException ee) {
}
}
try {
conn.setReadOnly(true);
st = conn.createStatement();
st.executeUpdate("insert into zoo (id, name, family) values (4, 'ChaChaCha', 'monkey');");
fail("SQLException is not thrown");
} catch (SQLException sqle) {
// expected
} finally {
try {
st.close();
} catch (SQLException ee) {
}
}
try {
conn.setReadOnly(false);
st = conn.createStatement();
st.execute("insert into zoo (id, name, family) values (4, 'ChiChiChi', 'monkey');");
} finally {
try {
st.close();
} catch (SQLException ee) {
}
}
conn.close();
try {
conn.setReadOnly(true);
fail("Exception expected");
} catch (SQLException e) {
//ok
}
}
// TODO ResultSet.CLOSE_CURSORS_AT_COMMIT is not supported
public void testGetHoldability() throws SQLException {
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
assertEquals(ResultSet.HOLD_CURSORS_OVER_COMMIT, conn.getHoldability());
try {
conn.setHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT);
assertEquals(ResultSet.CLOSE_CURSORS_AT_COMMIT, conn
.getHoldability());
} catch (SQLException e) {
assertEquals("not supported", e.getMessage());
}
// Exception checking
conn.close();
try {
conn.getHoldability();
fail("Could execute statement on closed connection.");
} catch (SQLException e) {
//ok
}
}
// TODO ResultSet.CLOSE_CURSORS_AT_COMMIT is not supported
public void testSetHoldability() throws SQLException {
Statement st = null;
try {
conn.setAutoCommit(false);
conn.setHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT);
assertEquals(ResultSet.CLOSE_CURSORS_AT_COMMIT, conn
.getHoldability());
st = conn.createStatement();
st.execute("insert into zoo (id, name, family) values (4, 'ChiChiChi', 'monkey');");
ResultSet rs = st.getResultSet();
conn.commit();
try {
rs.next();
} catch (SQLException sqle) {
//ok
}
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
assertEquals(ResultSet.HOLD_CURSORS_OVER_COMMIT, conn
.getHoldability());
st = conn.createStatement();
st.execute("insert into zoo (id, name, family) values (4, 'ChiChiChi', 'monkey');");
rs = st.getResultSet();
conn.commit();
rs.next();
} finally {
try {
st.close();
} catch (Exception ee) {
}
}
try {
conn.setHoldability(-1);
fail("SQLException is not thrown");
} catch (SQLException sqle) {
// expected
}
}
// TODO only Connection.TRANSACTION_SERIALIZABLE is supported
public void testGetTransactionIsolation() throws SQLException {
conn.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
assertEquals(Connection.TRANSACTION_READ_UNCOMMITTED, conn
.getTransactionIsolation());
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
assertEquals(Connection.TRANSACTION_READ_COMMITTED, conn
.getTransactionIsolation());
conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
assertEquals(Connection.TRANSACTION_REPEATABLE_READ, conn
.getTransactionIsolation());
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
assertEquals(Connection.TRANSACTION_SERIALIZABLE, conn
.getTransactionIsolation());
// Exception checking
conn.close();
try {
conn.getTransactionIsolation();
fail("Could execute statement on closed connection.");
} catch (SQLException e) {
//ok
}
}
// TODO only Connection.TRANSACTION_SERIALIZABLE is supported
public void testGetTransactionIsolationNotSupported() throws SQLException {
/*
try {
conn
.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
assertEquals(Connection.TRANSACTION_READ_UNCOMMITTED, conn
.getTransactionIsolation());
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
assertEquals(Connection.TRANSACTION_READ_COMMITTED, conn
.getTransactionIsolation());
conn
.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
assertEquals(Connection.TRANSACTION_REPEATABLE_READ, conn
.getTransactionIsolation());
} catch (SQLException sqle) {
fail("SQLException is thrown: " + sqle.toString());
}
*/
}
// TODO only Connection.TRANSACTION_SERIALIZABLE is supported
public void testSetTransactionIsolation() throws SQLException {
// conn
// .setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
// assertEquals(Connection.TRANSACTION_READ_UNCOMMITTED, conn
// .getTransactionIsolation());
// conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
// assertEquals(Connection.TRANSACTION_READ_COMMITTED, conn
// .getTransactionIsolation());
// conn
// .setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
// assertEquals(Connection.TRANSACTION_REPEATABLE_READ, conn
// .getTransactionIsolation());
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
assertEquals(Connection.TRANSACTION_SERIALIZABLE, conn.getTransactionIsolation());
try {
conn.setTransactionIsolation(0);
fail("SQLException is not thrown");
} catch (SQLException sqle) {
// expected
}
}
// TODO setCatalog method does nothing: Hint default catalog sqlite_master.
public void testSetCatalog() throws SQLException {
String[] catalogs = { "test", "test1", "test" };
Statement st = null;
try {
for (int i = 0; i < catalogs.length; i++) {
conn.setCatalog(catalogs[i]);
assertNull(catalogs[i], conn.getCatalog());
st = conn.createStatement();
st
.equals("create table test_table (id integer not null, name varchar(20), primary key(id));");
st.equals("drop table test_table;");
}
} finally {
try {
st.close();
} catch (Exception ee) {
}
}
/*
String[] catalogs = { "test"};
Statement st = null;
try {
for (int i = 0; i < catalogs.length; i++) {
conn.setCatalog(catalogs[i]);
fail("illegal catalog name");
assertEquals(catalogs[i], conn.getCatalog());
st = conn.createStatement();
st
.equals("create table test_table (id integer not null, name varchar(20), primary key(id));");
st.equals("drop table test_table;");
}
} catch (SQLException sqle) {
System.out.println("TODO: Test for correct error message: name with ,\"sqlite_\" prefix expected");
} finally {
try {
st.close();
} catch (Exception ee) {
}
}
String[] catalogs = { "sqlite_test", "sqlite_test1", "sqlite_test" };
Statement st = null;
try {
for (int i = 0; i < catalogs.length; i++) {
conn.setCatalog(catalogs[i]);
assertEquals(catalogs[i], conn.getCatalog());
st = conn.createStatement();
st
.equals("create table test_table (id integer not null, name varchar(20), primary key(id));");
st.equals("drop table test_table;");
}
} catch (SQLException sqle) {
fail("SQLException is thrown");
} finally {
try {
st.close();
} catch (Exception ee) {
}
}
try {
conn.setCatalog(null);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
try {
conn.setCatalog("not_exist");
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
*/
}
// not supported
public void testGetCatalog() throws SQLException {
// test default catalog
assertEquals("sqlite_master", conn.getCatalog());
String[] catalogs = { "sqlite_test", "sqlite_test1", "sqlite_test" };
Statement st = null;
for (int i = 0; i < catalogs.length; i++) {
conn.setCatalog(catalogs[i]);
assertNull(conn.getCatalog());
}
// Exception checking
conn.close();
try {
conn.getCatalog();
fail("Could execute statement on closed connection.");
} catch (SQLException e) {
//ok
}
}
// TODO setTypeMap is not supported
public void testSetTypeMap() {
/*
try {
java.util.Map map = conn.getTypeMap();
map
.put(
"org.apache.harmony.sql.tests.java.sql.TestHelper_Connection1",
Class.forName("TestHelper_Connection1"));
conn.setTypeMap(map);
assertEquals(map, conn.getTypeMap());
} catch (SQLException sqle) {
//ok
} catch (Exception e) {
fail("Unexpected Exception " + e.getMessage());
}
try {
conn.setTypeMap(null);
fail("SQLException is not thrown");
} catch (SQLException e) {
// expected
}
*/
}
// TODO getTypeMap is not supported
public void testGetTypeMap() throws SQLException {
/*
try {
java.util.Map map = conn.getTypeMap();
map
.put(
"org.apache.harmony.sql.tests.java.sql.TestHelper_Connection1",
Class.forName("TestHelper_Connection1"));
conn.setTypeMap(map);
assertEquals(map, conn.getTypeMap());
} catch (SQLException sqle) {
//ok
} catch (Exception e) {
fail("Unexpected Exception " + e.getMessage());
}
// Exception checking
conn.close();
try {
conn.setTypeMap(null);
fail("Could execute statement on closed connection.");
} catch (SQLException e) {
//ok
}
*/
}
// TODO nativeSQL is not supported
public void testNativeSQL() throws SQLException{
String[] queries = {
"select * from zoo;",
"insert into zoo (id, name, family) values (3, 'Chichichi', 'monkey');",
"create table zoo_office(id integer not null, name varchar(20), primary key(id));",
"drop table zoo_office;" };
String[] native_queries = {
"select * from zoo;",
"insert into zoo (id, name, family) values (3, 'Chichichi', 'monkey');",
"create table zoo_office(id integer not null, name varchar(20), primary key(id));",
"drop table zoo_office;" };
Statement st = null;
String nativeQuery = "";
try {
for (int i = 0; i < queries.length; i++) {
nativeQuery = conn.nativeSQL(queries[i]);
assertEquals(native_queries[i], nativeQuery);
st = conn.createStatement();
st.execute(nativeQuery);
}
} catch (SQLException sqle) {
//ok
} finally {
try {
st.close();
} catch (Exception ee) {
}
}
String[] inc_queries = { "", " ", "not query" };
for (int i = 0; i < inc_queries.length; i++) {
try {
nativeQuery = conn.nativeSQL(inc_queries[i]);
assertEquals(inc_queries[i], nativeQuery);
} catch (SQLException e) {
assertEquals("not supported",e.getMessage());
}
}
// Exception checking
conn.close();
try {
conn.nativeSQL(inc_queries[0]);
fail("Could execute statement on closed connection.");
} catch (SQLException e) {
//ok
}
}
// TODO prepareCall is not supported
public void testPrepareCall() throws SQLException {
CallableStatement cstmt = null;
ResultSet rs = null;
ResultSet rs1 = null;
Statement st = null;
Statement st1 = null;
try {
cstmt = conn.prepareCall("call welcomeAnimal(3, 'Petya', 'Cock')");
st = conn.createStatement();
st.execute("select * from zoo");
rs = st.getResultSet();
assertEquals(2, getCount(rs));
cstmt.execute();
st1 = conn.createStatement();
st1.execute("select * from zoo");
rs1 = st1.getResultSet();
assertEquals(3, getCount(rs1));
} catch (SQLException e) {
//ok not supported
} finally {
try {
st.close();
st1.close();
rs.close();
rs1.close();
cstmt.close();
} catch (Exception ee) {
}
}
try {
conn.prepareCall("welcomeAnimal(4, 'Petya', 'Cock')");
fail("SQL Exception is not thrown");
} catch (SQLException e) {
// expected
}
try {
conn.prepareCall(null);
fail("SQL Exception is not thrown");
} catch (SQLException e) {
// expected
}
// Exception checking
conn.close();
try {
conn.prepareCall("");
fail("Could execute statement on closed connection.");
} catch (SQLException e) {
//ok
}
}
// TODO prepareCall is not supported
public void testPrepareCall_String_int_int() {
CallableStatement cstmt = null;
ResultSet rs = null;
try {
String query = "call welcomeAnimal(3, 'Petya', 'Cock')";
cstmt = conn.prepareCall(query, ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
} catch (SQLException e) {
//ok
}
/*
try {
String query = "call welcomeAnimal(3, 'Petya', 'Dino')";
cstmt = conn.prepareCall(query, ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
cstmt.execute("select id, name from zoo");
rs = cstmt.getResultSet();
try {
rs.deleteRow();
fail("Can delete row for READ_ONLY ResultSet");
} catch (SQLException sqle) {
// expected
}
try {
rs.absolute(0);
fail("Can move cursor to the last position for TYPE_FORWARD_ONLY ResultSet");
} catch (SQLException sqle) {
// expected
}
} catch (SQLException e) {
fail("SQLException was thrown: " + e.getMessage());
} finally {
try {
rs.close();
cstmt.close();
} catch (Exception ee) {
}
}
Statement st = null;
try {
st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
st.execute("select name, family from zoo");
rs = st.getResultSet();
try {
rs.insertRow();
rs.updateObject("family", "bird");
rs.next();
rs.previous();
assertEquals("parrot", (rs.getString(1)));
fail("SQLException was not thrown");
} catch (SQLException sqle) {
// expected
}
} catch (SQLException e) {
fail("SQLException was thrown: " + e.getMessage());
} finally {
try {
rs.close();
st.close();
} catch (SQLException ee) {
}
}
try {
st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
st.execute("select name, family from zoo");
rs = st.getResultSet();
try {
rs.insertRow();
rs.updateObject("family", "bird");
rs.next();
rs.previous();
assertEquals("bird", (rs.getString(1)));
fail("SQLException was not thrown");
} catch (SQLException sqle) {
// expected
}
} catch (SQLException e) {
fail("SQLException was thrown: " + e.getMessage());
} finally {
try {
rs.close();
st.close();
} catch (SQLException ee) {
}
}
try {
conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, -1);
fail("SQLException was not thrown");
} catch (SQLException sqle) {
// expected
}
try {
conn.createStatement(Integer.MIN_VALUE, ResultSet.CONCUR_READ_ONLY);
fail("SQLException was not thrown");
} catch (SQLException sqle) {
// expected
}
*/
}
// TODO prepareCall is not supported
public void testPrepareCall_String_int_int_int() {
CallableStatement cstmt = null;
ResultSet rs = null;
try {
String query = "call welcomeAnimal(?, ?, ?)";
cstmt = conn.prepareCall(query, ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY,
ResultSet.HOLD_CURSORS_OVER_COMMIT);
} catch (SQLException e) {
//ok
}
/*
try {
String query = "call welcomeAnimal(?, ?, ?)";
cstmt = conn.prepareCall(query, ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY,
ResultSet.HOLD_CURSORS_OVER_COMMIT);
cstmt.setInt(1, 3);
cstmt.setString(2, "Petya");
cstmt.setString(3, "Cock");
cstmt.execute("select id, name from zoo");
rs = cstmt.getResultSet();
try {
rs.close();
fail("SQLException was not thrown");
} catch (SQLException sqle) {
fail("Unexpected exception was thrown during closing ResultSet");
}
} catch (SQLException e) {
fail("SQLException was thrown: " + e.getMessage());
} finally {
try {
rs.close();
cstmt.close();
} catch (Exception ee) {
}
}
Statement st = null;
try {
st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY,
ResultSet.CLOSE_CURSORS_AT_COMMIT);
st.execute("select id, name from zoo");
rs = st.getResultSet();
try {
rs.close();
fail("SQLException was not thrown");
} catch (SQLException sqle) {
// expected
}
} catch (SQLException e) {
fail("SQLException was thrown: " + e.getMessage());
}
try {
conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY, -100);
fail("SQLException was not thrown");
} catch (SQLException sqle) {
// expected
}
*/
}
public void testPrepareStatement() throws SQLException {
PreparedStatement prst = null;
Statement st = null;
ResultSet rs = null;
ResultSet rs1 = null;
try {
String update = "update zoo set family = ? where name = ?;";
prst = conn.prepareStatement(update);
prst.setString(1, "cat");
prst.setString(2, "Yasha");
st = conn.createStatement();
st.execute("select * from zoo where family = 'cat'");
rs = st.getResultSet();
assertEquals(0, getCount(rs));
prst.executeUpdate();
st.execute("select * from zoo where family = 'cat'");
rs1 = st.getResultSet();
assertEquals(1, getCount(rs1));
} finally {
try {
rs.close();
rs1.close();
prst.close();
st.close();
} catch (SQLException ee) {
}
}
try {
prst = conn.prepareStatement("");
prst.execute();
fail("SQLException is not thrown");
} catch (SQLException e) {
//ok
}
try {
conn.prepareStatement(null);
fail("SQLException is not thrown");
} catch (Exception e) {
//ok
}
}
// TODO Crashes VM. Fix later.
public void testPrepareStatement_String_int() throws SQLException {
PreparedStatement prst = null;
PreparedStatement prst1 = null;
Statement st = null;
ResultSet rs = null;
ResultSet rs1 = null;
ResultSet rs4 = null;
ResultSet rs5 = null;
try {
String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
prst = conn.prepareStatement(insert,
Statement.RETURN_GENERATED_KEYS);
fail("Fail: prepareStatement does not fail");
} catch (SQLException e) {
//ok not supported
}
try {
String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
prst = conn.prepareStatement(insert,
Statement.NO_GENERATED_KEYS);
prst.setInt(1, 8);
prst.setString(2, "Tuzik");
prst.setString(3, "dog");
st = conn.createStatement();
st.execute("select * from zoo");
rs = st.getResultSet();
assertEquals(2, getCount(rs));
prst.execute();
st.execute("select * from zoo where family = 'dog'");
rs1 = st.getResultSet();
assertEquals(1, getCount(rs1));
// TODO getGeneratedKeys is not supported
rs4 = prst.getGeneratedKeys();
assertEquals(0, getCount(rs4));
prst1 = conn.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS);
prst1.setInt(1, 5);
prst1.setString(2, "Layka");
prst1.setString(3, "dog");
prst1.execute();
rs5 = prst1.getGeneratedKeys();
assertEquals(0, getCount(rs5));
} finally {
try {
rs.close();
rs1.close();
prst.close();
st.close();
} catch (Exception ee) {
}
}
}
public void testCommit() throws SQLException {
Statement st = null;
Statement st1 = null;
Statement st2 = null;
Statement st3 = null;
Statement st4 = null;
ResultSet rs1 = null;
ResultSet rs2 = null;
ResultSet rs3 = null;
ResultSet rs4 = null;
try {
conn.setAutoCommit(false);
st = conn.createStatement();
st.execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
st.execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
st1 = conn.createStatement();
st1.execute("select * from zoo");
rs1 = st1.getResultSet();
assertEquals(4, getCount(rs1));
try {
conn.commit();
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
} finally {
try {
rs2.close();
st2.close();
} catch (SQLException ee) {
}
}
try {
st3 = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY,
ResultSet.HOLD_CURSORS_OVER_COMMIT);
st3.execute("select * from zoo");
rs3 = st3.getResultSet();
conn.commit();
assertEquals(4, getCount(rs3));
} finally {
try {
if (rs3 != null) rs3.close();
if (st3 != null) st3.close();
} catch (SQLException ee) {
}
}
} finally {
try {
rs1.close();
st.close();
st1.close();
} catch (Exception ee) {
}
}
}
public void testRollback() throws SQLException {
Statement st = null;
Statement st1 = null;
ResultSet rs1 = null;
ResultSet rs2 = null;
ResultSet rs3 = null;
try {
conn.setAutoCommit(false);
st = conn.createStatement();
st.execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
st.execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
conn.rollback();
st1 = conn.createStatement();
st1.execute("select * from zoo");
rs1 = st1.getResultSet();
assertEquals("Rollback was ineffective",2, getCount(rs1));
} finally {
conn.setAutoCommit(true);
try {
st.close();
st1.close();
rs1.close();
} catch (SQLException ee) {
}
}
try {
conn.setAutoCommit(false);
st = conn.createStatement();
st.execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
st.execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
if (!conn.getAutoCommit()) {
st1 = conn.createStatement();
st1.execute("select * from zoo");
rs1 = st1.getResultSet();
assertEquals(4, getCount(rs1));
Statement st2 = null;
Statement st3 = null;
try {
conn.commit();
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
// rollback after commit ineffective
conn.rollback();
st3 = conn.createStatement();
st3.execute("select * from zoo");
rs3 = st3.getResultSet();
assertEquals(4, getCount(rs3));
} finally {
conn.setAutoCommit(true);
try {
rs2.close();
rs3.close();
st2.close();
st3.close();
} catch (SQLException ee) {
}
}
} else {
fail("Error in test setup: cannot turn autocommit off.");
}
} finally {
try {
st.close();
st1.close();
rs1.close();
} catch (SQLException ee) {
}
}
conn.close();
try {
conn.rollback();
fail("SQLException expected");
} catch (SQLException e) {
// ok
}
}
// TODO setSavepoint is not supported
public void testSetSavepoint() throws SQLException {
conn.setAutoCommit(false);
try {
Savepoint sp = conn.setSavepoint();
} catch (SQLException e) {
// ok not supported
}
//Complete test but: not supported exception is thrown
/*
try {
conn.setAutoCommit(false);
st = conn.createStatement();
st
.execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
st
.execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
if (!conn.getAutoCommit()) {
st1 = conn.createStatement();
st1.execute("select * from zoo");
rs1 = st1.getResultSet();
assertEquals(4, getCount(rs1));
Statement st2 = null;
ResultSet rs2 = null;
try {
Savepoint sp = conn.setSavepoint();
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
conn.rollback(sp);
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.toString());
} finally {
try {
rs2.close();
st2.close();
} catch (Exception ee) {
}
}
try {
Savepoint sp1 = conn.setSavepoint();
assertNotNull(sp1);
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
Savepoint sp2 = conn.setSavepoint();
assertNotNull(sp2);
st
.execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
conn.rollback(sp1);
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.toString());
} finally {
try {
rs2.close();
st2.close();
} catch (SQLException ee) {
}
}
try {
Savepoint sp1 = conn.setSavepoint();
assertNotNull(sp1);
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
Savepoint sp2 = conn.setSavepoint();
assertNotNull(sp2);
st
.execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
conn.rollback();
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.toString());
} finally {
try {
rs2.close();
st2.close();
} catch (SQLException ee) {
}
}
} else {
st1 = conn.createStatement();
st1.execute("select * from zoo");
rs1 = st1.getResultSet();
assertEquals(4, getCount(rs1));
try {
Savepoint sp = conn.setSavepoint();
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
conn.rollback(sp);
fail("SQLException is not thrown");
} catch (SQLException sqle) {
// expected
}
}
} catch (SQLException sqle) {
fail("SQLException is thrown: " + sqle.toString());
} finally {
try {
rs1.close();
st.close();
st1.close();
} catch (SQLException ee) {
}
}
*/
}
// TODO setSavepoint is not supported
public void testSetSavepoint_String() throws SQLException {
String testSavepoint = "testSavepoint";
conn.setAutoCommit(false);
try {
Savepoint sp = conn.setSavepoint(testSavepoint);
} catch (SQLException e) {
// ok not supported
}
/*
Statement st = null;
Statement st1 = null;
ResultSet rs1 = null;
try {
conn.setAutoCommit(false);
st = conn.createStatement();
st
.execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
st
.execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
if (!conn.getAutoCommit()) {
st1 = conn.createStatement();
st1.execute("select * from zoo");
rs1 = st1.getResultSet();
assertEquals(4, getCount(rs1));
Statement st2 = null;
ResultSet rs2 = null;
try {
Savepoint sp = conn.setSavepoint("one");
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
conn.rollback(sp);
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.toString());
} finally {
try {
rs2.close();
st2.close();
} catch (Exception ee) {
}
}
try {
Savepoint sp1 = conn.setSavepoint("one");
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
Savepoint sp2 = conn.setSavepoint("two");
st
.execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
conn.rollback(sp1);
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.toString());
} finally {
try {
rs2.close();
st2.close();
} catch (SQLException ee) {
}
}
try {
Savepoint sp1 = conn.setSavepoint("three");
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
Savepoint sp2 = conn.setSavepoint("four");
st
.execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
conn.rollback();
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.toString());
} finally {
try {
rs2.close();
st2.close();
} catch (SQLException ee) {
}
}
} else {
st1 = conn.createStatement();
st1.execute("select * from zoo");
rs1 = st1.getResultSet();
assertEquals(4, getCount(rs1));
try {
Savepoint sp = conn.setSavepoint("five");
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
conn.rollback(sp);
fail("SQLException is not thrown");
} catch (SQLException sqle) {
// expected
}
}
} catch (SQLException sqle) {
fail("SQLException is thrown: " + sqle.toString());
} finally {
try {
rs1.close();
st.close();
st1.close();
} catch (SQLException ee) {
}
}
*/
}
// TODO Savepoint is not supported
public void testRollback_Savepoint() throws SQLException {
Savepoint sp = new DummySavePoint();
conn.setAutoCommit(false);
try {
conn.rollback(sp);
} catch (SQLException e) {
//ok
}
/*
Statement st = null;
Statement st1 = null;
ResultSet rs1 = null;
try {
conn.setAutoCommit(false);
st = conn.createStatement();
st
.execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
st
.execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
if (!conn.getAutoCommit()) {
st1 = conn.createStatement();
st1.execute("select * from zoo");
rs1 = st1.getResultSet();
assertEquals(4, getCount(rs1));
Statement st2 = null;
ResultSet rs2 = null;
try {
Savepoint sp = conn.setSavepoint("one");
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
conn.rollback(sp);
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.toString());
} finally {
try {
rs2.close();
st2.close();
} catch (Exception ee) {
}
}
try {
Savepoint sp1 = conn.setSavepoint("one");
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
Savepoint sp2 = conn.setSavepoint("two");
st
.execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
conn.rollback(sp1);
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.toString());
} finally {
try {
rs2.close();
st2.close();
} catch (SQLException ee) {
}
}
try {
Savepoint sp1 = conn.setSavepoint("three");
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
Savepoint sp2 = conn.setSavepoint("four");
st
.execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
conn.rollback();
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.toString());
} finally {
try {
rs2.close();
st2.close();
} catch (SQLException ee) {
}
}
} else {
st1 = conn.createStatement();
st1.execute("select * from zoo");
rs1 = st1.getResultSet();
assertEquals(4, getCount(rs1));
try {
Savepoint sp = conn.setSavepoint("five");
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
conn.rollback(sp);
fail("SQLException is not thrown");
} catch (SQLException sqle) {
// expected
}
}
} catch (SQLException sqle) {
fail("SQLException is thrown: " + sqle.toString());
} finally {
try {
rs1.close();
st.close();
st1.close();
} catch (SQLException ee) {
}
}
*/
}
// TODO Savepoint is not supported
public void testReleaseSavepoint_Savepoint() throws SQLException {
Savepoint sp = new DummySavePoint();
conn.setAutoCommit(false);
try {
conn.releaseSavepoint(sp);
} catch (SQLException e) {
//ok
}
/*
Statement st = null;
Statement st1 = null;
ResultSet rs1 = null;
try {
conn.setAutoCommit(false);
st = conn.createStatement();
st
.execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
st
.execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
if (!conn.getAutoCommit()) {
st1 = conn.createStatement();
st1.execute("select * from zoo");
rs1 = st1.getResultSet();
assertEquals(4, getCount(rs1));
Statement st2 = null;
ResultSet rs2 = null;
try {
Savepoint sp = conn.setSavepoint("one");
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
conn.rollback(sp);
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
conn.releaseSavepoint(sp);
try {
conn.rollback(sp);
fail("SQLException is not thrown");
} catch (SQLException sqle) {
// expected
}
conn.rollback();
} catch (SQLException e) {
fail("SQLException is thrown: " + e.toString());
} finally {
try {
rs2.close();
st2.close();
} catch (Exception ee) {
}
}
try {
Savepoint sp1 = conn.setSavepoint("one");
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
Savepoint sp2 = conn.setSavepoint("two");
st
.execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
conn.releaseSavepoint(sp1);
try {
conn.rollback(sp1);
fail("SQLException is not thrown");
} catch (SQLException sqle) {
// expected
}
conn.commit();
conn.rollback(sp2);
st2 = conn.createStatement();
st2.execute("select * from zoo");
rs2 = st2.getResultSet();
assertEquals(4, getCount(rs2));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.toString());
} finally {
try {
rs2.close();
st2.close();
} catch (SQLException ee) {
}
}
} else {
st1 = conn.createStatement();
st1.execute("select * from zoo");
rs1 = st1.getResultSet();
assertEquals(4, getCount(rs1));
try {
Savepoint sp = conn.setSavepoint("five");
st
.execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
conn.releaseSavepoint(sp);
fail("SQLException is not thrown");
} catch (SQLException sqle) {
// expected
}
}
} catch (SQLException sqle) {
fail("SQLException is thrown: " + sqle.toString());
} finally {
try {
rs1.close();
st.close();
st1.close();
} catch (SQLException ee) {
}
}
*/
}
// TODO prepareStatement(String sql, int[] columnIndexes) is not supported
public void testPrepareStatement_String_intArray() {
PreparedStatement prst = null;
try {
String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
prst = conn.prepareStatement(insert, new int[] { 0, 1, 2 });
} catch (SQLException e) {
//ok not supported
} finally {
try {
prst.close();
} catch (Exception ee) {
}
}
/*
Statement st = null;
PreparedStatement prst1 = null;
PreparedStatement prst = null;
ResultSet rs = null;
ResultSet rs1 = null;
ResultSet rs4 = null;
ResultSet rs5 = null;
try {
String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
prst = conn.prepareStatement(insert, new int[] { 0, 1, 2 });
prst.setInt(1, 8);
prst.setString(2, "Tuzik");
prst.setString(3, "dog");
st = conn.createStatement();
st.execute("select * from zoo");
rs = st.getResultSet();
assertEquals(2, getCount(rs));
prst.execute();
st.execute("select * from zoo where family = 'dog'");
rs1 = st.getResultSet();
assertEquals(1, getCount(rs1));
rs4 = prst.getGeneratedKeys();
assertEquals(0, getCount(rs4));
prst1 = conn.prepareStatement(insert, new int[] { 0, 1, 2, 10 });
prst1.setInt(1, 5);
prst1.setString(2, "Layka");
prst1.setString(3, "dog");
prst1.execute();
rs5 = prst1.getGeneratedKeys();
assertEquals(0, getCount(rs5));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.getMessage());
} finally {
try {
rs.close();
rs1.close();
rs4.close();
rs5.close();
st.close();
prst1.close();
prst.close();
} catch (Exception ee) {
}
}
try {
String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
conn.prepareStatement(insert, new int[] {});
} catch (SQLException e) {
fail("SQLException is thrown");
}
try {
String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
conn.prepareStatement(insert, (int[]) null);
} catch (SQLException e) {
fail("SQLException is thrown");
}
*/
}
public void testPrepareStatement_String_int_int() throws SQLException {
String query = "insert into zoo (id, name, family) values (?, ?, ?);";
PreparedStatement st = null;
ResultSet rs = null;
try {
st = conn.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
st.execute("select id, name from zoo");
rs = st.getResultSet();
try {
rs.deleteRow();
fail("Can delete row for READ_ONLY ResultSet");
} catch (SQLException sqle) {
// expected
}
} finally {
try {
if (rs != null) rs.close();
if (st != null) st.close();
} catch (SQLException ee) {
}
}
try {
st = conn.prepareStatement(query, ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
st.execute("select name, family from zoo");
rs = st.getResultSet();
try {
rs.insertRow();
rs.updateObject("family", "bird");
rs.next();
rs.previous();
assertEquals("bird", (rs.getString(1)));
} catch (SQLException sqle) {
// expected
}
} finally {
try {
rs.close();
st.close();
} catch (SQLException ee) {
}
}
try {
conn.prepareStatement(query, ResultSet.TYPE_SCROLL_SENSITIVE, -1);
} catch (SQLException sqle) {
// expected
}
try {
conn.prepareStatement(query, Integer.MIN_VALUE,
ResultSet.CONCUR_READ_ONLY);
} catch (SQLException sqle) {
// expected
}
}
// not supported
public void testPrepareStatementNotSupported() throws SQLException {
String query = "insert into zoo (id, name, family) values (?, ?, ?);";
PreparedStatement st = null;
ResultSet rs = null;
try {
st = conn.prepareStatement(query,
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
st.execute("select name, family from zoo");
rs = st.getResultSet();
rs.insertRow();
rs.updateObject("family", "bird");
rs.next();
rs.previous();
assertEquals("parrot", (rs.getString(1)));
} finally {
try {
if (rs != null) rs.close();
if (st != null) st.close();
} catch (SQLException ee) {
}
}
}
// TODO Crashes VM. Fix later.
public void testPrepareStatement_String_int_int_int() throws SQLException {
String query = "insert into zoo (id, name, family) values (?, ?, ?);";
PreparedStatement st = null;
ResultSet rs = null;
try {
st = conn.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY,
ResultSet.HOLD_CURSORS_OVER_COMMIT);
st.setInt(1, 3);
st.setString(2, "Petya");
st.setString(3, "Cock");
st.execute("select id, name from zoo");
rs = st.getResultSet();
rs.close();
} finally {
try {
if (rs != null) rs.close();
if (st != null) st.close();
} catch (SQLException ee) {
}
}
/*
//TODO ResultSet.CLOSE_CURSORS_AT_COMMIT is not supported
try {
st = conn.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY,
ResultSet.CLOSE_CURSORS_AT_COMMIT);
st.execute("select id, name from zoo");
rs = st.getResultSet();
try {
rs.close();
fail("SQLException was not thrown");
} catch (SQLException sqle) {
// expected
}
} catch (SQLException e) {
fail("SQLException was thrown: " + e.getMessage());
} finally {
try {
st.close();
rs.close();
} catch (SQLException ee) {
}
}
*/
try {
conn.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY, -100);
fail("SQLException was not thrown");
} catch (SQLException sqle) {
// expected
}
}
// TODO prepareStatement(String sql, String[] columnNames) method is not supported
public void testPrepareStatement_String_StringArray() {
PreparedStatement prst = null;
PreparedStatement prst1 = null;
ResultSet rs = null;
ResultSet rs1 = null;
ResultSet rs4 = null;
ResultSet rs5 = null;
try {
String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
conn.prepareStatement(insert, new String[] { "id", "name",
"family" });
} catch (SQLException e) {
//ok not supported
}
/*
try {
String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
conn.prepareStatement(insert, new String[] {});
} catch (SQLException e) {
fail("SQLException is thrown");
}
try {
String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
conn.prepareStatement(insert, (String[]) null);
} catch (SQLException e) {
fail("SQLException is thrown");
}
try {
String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
prst = conn.prepareStatement(insert, new String[] { "id", "name",
"family" });
prst.setInt(1, 8);
prst.setString(2, "Tuzik");
prst.setString(3, "dog");
Statement st = conn.createStatement();
st.execute("select * from zoo");
rs = st.getResultSet();
assertEquals(2, getCount(rs));
prst.execute();
st.execute("select * from zoo where family = 'dog'");
rs1 = st.getResultSet();
assertEquals(1, getCount(rs1));
rs4 = prst.getGeneratedKeys();
assertEquals(0, getCount(rs4));
prst1 = conn.prepareStatement(insert, new String[] { "id", "name", "" });
prst1.setInt(1, 5);
prst1.setString(2, "Layka");
prst1.setString(3, "dog");
prst1.execute();
rs5 = prst1.getGeneratedKeys();
assertEquals(0, getCount(rs5));
} catch (SQLException e) {
fail("SQLException is thrown: " + e.getMessage());
} finally {
try {
rs.close();
rs1.close();
rs4.close();
rs5.close();
prst.close();
prst1.close();
} catch (Exception ee) {
}
}
*/
}
public void testClose() throws SQLException {
if (! conn.isClosed()) {
conn.close();
}
assertTrue(conn.isClosed());
try {
conn.prepareCall("select * from zoo");
fail("Should not be able to prepare query closed connection");
} catch (SQLException e) {
//ok
}
}
public void testIsClosed() throws Exception {
assertFalse(conn.isClosed());
conn.close();
assertTrue(conn.isClosed());
conn = DriverManager.getConnection("jdbc:sqlite:/" + dbFile.getPath());
assertFalse(conn.isClosed());
Statement st = conn.createStatement();
st.execute("select * from zoo");
}
private static class DummySavePoint implements Savepoint{
public int getSavepointId() {
return 0;
}
public String getSavepointName() {
return "NoName";
}
}
}