Description:
Version:mysql-connector-j-9.2.0 && mysql Ver 8.0.36 for Win64 on x86_64 (MySQL Community Server - GPL)
When the setFetchSize(int) method provided in the Statement class is used continuously, an exception occurs: java.sql.SQLException: Illegal value for setFetchSize().
When we use stmt.setFetchSize() for the third time, an exception occurs (line 264 of the complete code). The pseudo code is as follows:
stmt = conn.createStatement(1003, 1007, 1);
stmt.setFetchSize(2147483647);
stmt.setFetchSize(-2147483648);
stmt.setFetchSize(2147483647); // ERROR
// java.sql.SQLException: Illegal value for setFetchSize().
How to repeat:
The complete code is as follows:
import java.sql.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TestJDBC {
public static void main(String[] args) throws SQLException {
Connection conn = null;
Statement stmt = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
Savepoint savepoint = null;
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb0?user=root&password=XXXX");
conn.setAutoCommit(false);
stmt = conn.createStatement(1003, 1007, 1);
System.out.println(stmt.getQueryTimeout());
stmt.setQueryTimeout(30);
System.out.println(stmt.getFetchSize());
stmt.setFetchSize(2147483647);
System.out.println(stmt.getMaxRows());
stmt.setMaxRows(100);
stmt.setEscapeProcessing(true);
System.out.println(stmt.getResultSetType());
System.out.println(stmt.getResultSetConcurrency());
System.out.println(stmt.getResultSetHoldability());
System.out.println(stmt.executeUpdate("DROP TABLE IF EXISTS table0_0;"));
System.out.println(stmt.executeLargeUpdate(
"CREATE TABLE table0_0(Id VARCHAR(5) PRIMARY KEY, Value0 TINYINT, Value1 DECIMAL, Value2 BIGINT);", 1));
savepoint = conn.setSavepoint();
stmt.addBatch("INSERT INTO table0_0 VALUES ('ID1', 1, 10.5, 100);");
stmt.addBatch("INSERT INTO table0_0 VALUES ('ID2', 2, 20.5, 200);");
System.out.println(Arrays.toString(stmt.executeBatch()));
rs = stmt.executeQuery("SELECT * FROM table0_0;");
System.out.println("rs.isFirst: " + rs.isFirst()); //OB、Mysql 输出false
System.out.println("rs.isLast: " + rs.isLast()); //OB、Mysql 输出false
//rs.afterLast(); //结果集类型为 TYPE_FORWARD_ONLY OB没有报错,Mysql报错
//rs.beforeFirst(); //这OB直接执行了,没有报错,Mysql报错抛出了异常
//rs.afterLast(); //这OB直接执行了,没有报错,Mysql报错抛出了异常
//System.out.println("疑惑!" + rs.last()); //这里也离谱,OB返回的是true,Mysql还是抛出异常 Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY
//System.out.println("疑惑!" + rs.first()); //这里更离谱,OB返回的是true,Mysql也是抛出异常 Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY
//System.out.println("疑惑!" + rs.previous());//Mysql这里直接抛出异常,但是OB这里只是输出false(createStatement(1003, 1007, 1)),mysql:Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
System.out.println(rs.next());
System.out.println(rs.getObject("Id"));
System.out.println(rs.getObject("Value0"));
System.out.println(rs.getObject("Value1"));
System.out.println(rs.getObject("Value2"));
try{
System.out.println(rs.isFirst());
} catch (SQLException e) {
System.out.println(e);
}
try{
System.out.println(rs.isLast());
} catch (SQLException e) {
System.out.println(e);
}
System.out.println(rs.isBeforeFirst());
System.out.println(rs.isAfterLast());
try {
rs.close();
} catch (SQLException e) {
System.out.println(e);
}
System.out.println(stmt.executeUpdate("UPDATE table0_0 SET Value0 = 10 WHERE Id = 'ID1';"));
try {
conn.rollback(savepoint);
} catch (SQLException e) {
System.out.println(e);
}
try {
conn.commit();
} catch (SQLException e) {
System.out.println(e);
}
conn.setAutoCommit(false);
savepoint = conn.setSavepoint("SP1");
System.out.println(stmt.executeUpdate("INSERT INTO table0_0 VALUES ('ID3', 3, 30.5, 300);"));
System.out.println(stmt.executeUpdate("INSERT INTO table0_0 VALUES ('ID4', 4, 40.5, 400);"));
rs = stmt.executeQuery("SELECT * FROM table0_0 WHERE Value0 > 2;");
//try {
//rs.setFetchSize(-2147483648); //这里OB报错,mysql没有报错
//} catch (SQLException e) {
// System.out.println("ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! OB : " + e);
//}
System.out.println(rs.next());
System.out.println(rs.getObject(1));
System.out.println(rs.getObject(2));
System.out.println(rs.getObject(3));
System.out.println(rs.getObject(4));
try {
rs.close();
} catch (SQLException e) {
System.out.println(e);
}
pstmt = conn.prepareStatement("INSERT INTO table0_0 VALUES (?, ?, ?, ?);");
pstmt.setObject(1, "ID5");
pstmt.setObject(2, 5);
pstmt.setObject(3, 50.5);
pstmt.setObject(4, 500);
System.out.println(pstmt.executeUpdate());
pstmt.clearParameters();
try {
pstmt.addBatch();
} catch (SQLException e) {
System.out.println(e);
}
System.out.println(Arrays.toString(pstmt.executeBatch()));
rs = stmt.executeQuery("SELECT * FROM table0_0 WHERE Value0 = 5;");
System.out.println(rs.next());
try {
rs.updateObject("Value0", 15);
rs.updateRow();
} catch (SQLException e) {
System.out.println(e);//
}
try {
rs.close();
} catch (SQLException e) {
System.out.println(e);
}
System.out.println(stmt.getQueryTimeout());
stmt.setQueryTimeout(60);
System.out.println(stmt.getMaxRows());
stmt.setMaxRows(200);
System.out.println(stmt.getFetchSize());
//try {
stmt.setFetchSize(-2147483648);
//} catch (SQLException e) {
// System.out.println("ERROR2!!!!!!!!!");
// System.out.println(e);
//}
rs = stmt.executeQuery("SELECT * FROM table0_0;");
try {
rs.setFetchDirection(1001);
} catch (SQLException e) {
System.out.println(e);
}
//JDK 17 中给出的解释:如果发生数据库访问错误;在关闭的结果集上调用此方法或结果集类型为TYPE_FORWARD_ONLY且提取方向不是FETCH_FORWARD
System.out.println("rs.getFetchDirection() : " + rs.getFetchDirection()); //这里OB输出的是1002!!!!!!Mysql输出的是1000(第一行->下一行),1002:ResultSet.FETCH_UNKNOWN表示结果集的处理方向由 JDBC 驱动程序和数据库系统决定,这里虽然没问题但是感觉怪怪的
System.out.println(rs.next());
try {
rs.previous(); // OB和Mysql都不支持因为是 Result set of type is ResultSet.TYPE_FORWARD_ONLY
} catch (SQLException e) {
System.out.println(e);
}
try {
rs.beforeFirst(); // OB和Mysql都不支持因为是 Result set of type is ResultSet.TYPE_FORWARD_ONLY
} catch (SQLException e) {
System.out.println(e);
}
try {
rs.afterLast(); // OB和Mysql都不支持因为是 Result set of type is ResultSet.TYPE_FORWARD_ONLY
} catch (SQLException e) {
System.out.println(e);
}
try {
rs.close();
} catch (SQLException e) {
System.out.println(e);
}
try {
System.out.println(stmt.executeUpdate("INSERT INTO table0_0 VALUES ('ID1', 1, 10.5, 100);"));
} catch (SQLException e) {
System.out.println(e);
}
try {
System.out.println(stmt.executeUpdate("UPDATE table0_0 SET Value0 = 200 WHERE Id = 'ID2';"));
} catch (SQLException e) {
System.out.println(e);
}
try {
stmt.executeQuery("SELECT * FROM non_existent_table;");
} catch (SQLException e) {
System.out.println(e);
}
conn.setAutoCommit(false);
savepoint = conn.setSavepoint("SP2");
System.out.println(stmt.executeUpdate("UPDATE table0_0 SET Value1 = 15.5 WHERE Id = 'ID3';"));
try {
conn.rollback(savepoint);
} catch (SQLException e) {
System.out.println(e);
}
try {
conn.commit();
} catch (SQLException e) {
System.out.println(e);
}
rs = stmt.executeQuery("SELECT * FROM table0_0 WHERE Value0 > 1 OR Id != 'ID2';");
//try{
//rs.setFetchSize(2147483647);
//} catch (Exception e){
// System.out.println("ERROR3!!!!!!!!!!!!!!!!!");
// System.out.println(e);
//}
System.out.println(rs.next());
System.out.println(rs.getObject("Id"));
System.out.println(rs.getObject("Value0"));
System.out.println(rs.getObject("Value1"));
System.out.println(rs.getObject("Value2"));
try {
System.out.println("rs.ifFirst(): " + rs.isFirst()); //这里Mysql输出了true
System.out.println("rs.isLast(): " + rs.isLast()); //这里mysql输出了false
} catch (Exception e) {
System.out.println(e + "这两个方法OB报错"); //java.sql.SQLException: Invalid operation on STREAMING ResultSet
}
System.out.println("ERROR 1 " + rs.isBeforeFirst()); //这里mysql、OB输出的是false
System.out.println("ERROR 2 " + rs.isAfterLast()); // 这里mysql、OB输出的是false
try {
rs.close(); //这里OB直接执行
} catch (SQLException e) {
System.out.println(e);
}
System.out.println(stmt.getResultSetConcurrency());
System.out.println(stmt.getResultSetType());
System.out.println(stmt.getResultSetHoldability());
pstmt = conn.prepareStatement("SELECT * FROM table0_0 WHERE Value0 > ?");
pstmt.setObject(1, 2);
rs = pstmt.executeQuery();
System.out.println(rs.next());
System.out.println(rs.getObject(1));
System.out.println(rs.getObject(2));
System.out.println(rs.getObject(3));
System.out.println(rs.getObject(4));
try {
rs.close();
} catch (SQLException e) {
System.out.println(e);
}
System.out.println(stmt.getQueryTimeout());
stmt.setQueryTimeout(120);
System.out.println(stmt.getMaxRows());
stmt.setMaxRows(500);
System.out.println(stmt.getFetchSize());
try {
stmt.setFetchSize(2147483647);
} catch (Exception e){
System.out.println("ERROR BIG !!!!!!!!!!!!!!!!!" + e);
//System.out.println(e);
}
rs = stmt.executeQuery("SELECT * FROM table0_0;");
try{
rs.setFetchDirection(1001); //Mysql和OB都报错了,OB报错:Invalid operation. Allowed direction are ResultSet.FETCH_FORWARD and ResultSet.FETCH_UNKNOWN
} catch (SQLException e) {
System.out.println(e);
}
System.out.println(rs.next());
try{
rs.previous(); // 这里也是
} catch (Exception e){
System.out.println("mysql报错:Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.,OB 报错Invalid operation on STREAMING ResultSet。");
}
try {
rs.beforeFirst();
} catch (SQLException e) {
System.out.println("Mysql 报错Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY. OB 报错Invalid operation on STREAMING ResultSet");
}
try{
rs.afterLast(); // 这里也是
} catch (SQLException e) {
System.out.println(" OB1 !!! Invalid operation on STREAMING ResultSet mysql报错:Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY");
}
try {
rs.close();
} catch (SQLException e) {
System.out.println(e);
}
conn.setAutoCommit(false);
savepoint = conn.setSavepoint("SP3");
System.out.println(stmt.executeUpdate("UPDATE table0_0 SET Value2 = 150 WHERE Id = 'ID4';"));
try {
conn.rollback(savepoint);
} catch (SQLException e) {
System.out.println(e);
}
try {
conn.commit();
} catch (SQLException e) {
System.out.println(e);
}
rs = stmt.executeQuery("SELECT * FROM table0_0 WHERE Value1 > 20.0 AND Value2 < 400;");
try{
rs.setFetchSize(-2147483648);
} catch (Exception e){
System.out.println("ERROR4!!!!!!!!!!!!!!!!! OB 的 rs.setFetchSize(-2147483648) 报错" + e);
}
System.out.println(rs.next());
System.out.println(rs.getObject("Id"));
System.out.println(rs.getObject("Value0"));
System.out.println(rs.getObject("Value1"));
System.out.println(rs.getObject("Value2"));
try {
System.out.println(rs.isFirst());
} catch (Exception e){
System.out.println("rs.isFirst() : OB Invalid operation on STREAMING ResultSet" + e);
// System.out.println(e);
}
try {
System.out.println(rs.isLast());
} catch (Exception e){
System.out.println("rs.isLast() : OB Invalid operation on STREAMING ResultSet" + e);
//System.out.println(e);
}
System.out.println(rs.isBeforeFirst());
System.out.println(rs.isAfterLast());
try {
rs.close();
} catch (SQLException e) {
System.out.println(e);
}
try {
System.out.println(stmt.executeUpdate("UPDATE table0_0 SET Value0 = -200 WHERE Id = 'ID2';"));
} catch (SQLException e) {
System.out.println(e);
}
try {
stmt.executeQuery("SELECT invalid_column FROM table0_0;");
} catch (SQLException e) {
System.out.println(e);
}
// try {
// stmt.executeQuery("SELECT * FROM table0_0 WHERE invalid_condition;");
// } catch (SQLException e) {
// System.out.println(e);
// }
try {
rs.close();
} catch (SQLException e) {
System.out.println(e);
}
try {
stmt.close();
} catch (SQLException e) {
System.out.println(e);
}
try {
pstmt.close();
} catch (SQLException e) {
System.out.println(e);
}
try {
conn.close();
} catch (SQLException e) {
System.out.println(e);
}
}
}
Description: Version:mysql-connector-j-9.2.0 && mysql Ver 8.0.36 for Win64 on x86_64 (MySQL Community Server - GPL) When the setFetchSize(int) method provided in the Statement class is used continuously, an exception occurs: java.sql.SQLException: Illegal value for setFetchSize(). When we use stmt.setFetchSize() for the third time, an exception occurs (line 264 of the complete code). The pseudo code is as follows: stmt = conn.createStatement(1003, 1007, 1); stmt.setFetchSize(2147483647); stmt.setFetchSize(-2147483648); stmt.setFetchSize(2147483647); // ERROR // java.sql.SQLException: Illegal value for setFetchSize(). How to repeat: The complete code is as follows: import java.sql.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class TestJDBC { public static void main(String[] args) throws SQLException { Connection conn = null; Statement stmt = null; PreparedStatement pstmt = null; ResultSet rs = null; Savepoint savepoint = null; conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb0?user=root&password=XXXX"); conn.setAutoCommit(false); stmt = conn.createStatement(1003, 1007, 1); System.out.println(stmt.getQueryTimeout()); stmt.setQueryTimeout(30); System.out.println(stmt.getFetchSize()); stmt.setFetchSize(2147483647); System.out.println(stmt.getMaxRows()); stmt.setMaxRows(100); stmt.setEscapeProcessing(true); System.out.println(stmt.getResultSetType()); System.out.println(stmt.getResultSetConcurrency()); System.out.println(stmt.getResultSetHoldability()); System.out.println(stmt.executeUpdate("DROP TABLE IF EXISTS table0_0;")); System.out.println(stmt.executeLargeUpdate( "CREATE TABLE table0_0(Id VARCHAR(5) PRIMARY KEY, Value0 TINYINT, Value1 DECIMAL, Value2 BIGINT);", 1)); savepoint = conn.setSavepoint(); stmt.addBatch("INSERT INTO table0_0 VALUES ('ID1', 1, 10.5, 100);"); stmt.addBatch("INSERT INTO table0_0 VALUES ('ID2', 2, 20.5, 200);"); System.out.println(Arrays.toString(stmt.executeBatch())); rs = stmt.executeQuery("SELECT * FROM table0_0;"); System.out.println("rs.isFirst: " + rs.isFirst()); //OB、Mysql 输出false System.out.println("rs.isLast: " + rs.isLast()); //OB、Mysql 输出false //rs.afterLast(); //结果集类型为 TYPE_FORWARD_ONLY OB没有报错,Mysql报错 //rs.beforeFirst(); //这OB直接执行了,没有报错,Mysql报错抛出了异常 //rs.afterLast(); //这OB直接执行了,没有报错,Mysql报错抛出了异常 //System.out.println("疑惑!" + rs.last()); //这里也离谱,OB返回的是true,Mysql还是抛出异常 Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY //System.out.println("疑惑!" + rs.first()); //这里更离谱,OB返回的是true,Mysql也是抛出异常 Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY //System.out.println("疑惑!" + rs.previous());//Mysql这里直接抛出异常,但是OB这里只是输出false(createStatement(1003, 1007, 1)),mysql:Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY. System.out.println(rs.next()); System.out.println(rs.getObject("Id")); System.out.println(rs.getObject("Value0")); System.out.println(rs.getObject("Value1")); System.out.println(rs.getObject("Value2")); try{ System.out.println(rs.isFirst()); } catch (SQLException e) { System.out.println(e); } try{ System.out.println(rs.isLast()); } catch (SQLException e) { System.out.println(e); } System.out.println(rs.isBeforeFirst()); System.out.println(rs.isAfterLast()); try { rs.close(); } catch (SQLException e) { System.out.println(e); } System.out.println(stmt.executeUpdate("UPDATE table0_0 SET Value0 = 10 WHERE Id = 'ID1';")); try { conn.rollback(savepoint); } catch (SQLException e) { System.out.println(e); } try { conn.commit(); } catch (SQLException e) { System.out.println(e); } conn.setAutoCommit(false); savepoint = conn.setSavepoint("SP1"); System.out.println(stmt.executeUpdate("INSERT INTO table0_0 VALUES ('ID3', 3, 30.5, 300);")); System.out.println(stmt.executeUpdate("INSERT INTO table0_0 VALUES ('ID4', 4, 40.5, 400);")); rs = stmt.executeQuery("SELECT * FROM table0_0 WHERE Value0 > 2;"); //try { //rs.setFetchSize(-2147483648); //这里OB报错,mysql没有报错 //} catch (SQLException e) { // System.out.println("ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! OB : " + e); //} System.out.println(rs.next()); System.out.println(rs.getObject(1)); System.out.println(rs.getObject(2)); System.out.println(rs.getObject(3)); System.out.println(rs.getObject(4)); try { rs.close(); } catch (SQLException e) { System.out.println(e); } pstmt = conn.prepareStatement("INSERT INTO table0_0 VALUES (?, ?, ?, ?);"); pstmt.setObject(1, "ID5"); pstmt.setObject(2, 5); pstmt.setObject(3, 50.5); pstmt.setObject(4, 500); System.out.println(pstmt.executeUpdate()); pstmt.clearParameters(); try { pstmt.addBatch(); } catch (SQLException e) { System.out.println(e); } System.out.println(Arrays.toString(pstmt.executeBatch())); rs = stmt.executeQuery("SELECT * FROM table0_0 WHERE Value0 = 5;"); System.out.println(rs.next()); try { rs.updateObject("Value0", 15); rs.updateRow(); } catch (SQLException e) { System.out.println(e);// } try { rs.close(); } catch (SQLException e) { System.out.println(e); } System.out.println(stmt.getQueryTimeout()); stmt.setQueryTimeout(60); System.out.println(stmt.getMaxRows()); stmt.setMaxRows(200); System.out.println(stmt.getFetchSize()); //try { stmt.setFetchSize(-2147483648); //} catch (SQLException e) { // System.out.println("ERROR2!!!!!!!!!"); // System.out.println(e); //} rs = stmt.executeQuery("SELECT * FROM table0_0;"); try { rs.setFetchDirection(1001); } catch (SQLException e) { System.out.println(e); } //JDK 17 中给出的解释:如果发生数据库访问错误;在关闭的结果集上调用此方法或结果集类型为TYPE_FORWARD_ONLY且提取方向不是FETCH_FORWARD System.out.println("rs.getFetchDirection() : " + rs.getFetchDirection()); //这里OB输出的是1002!!!!!!Mysql输出的是1000(第一行->下一行),1002:ResultSet.FETCH_UNKNOWN表示结果集的处理方向由 JDBC 驱动程序和数据库系统决定,这里虽然没问题但是感觉怪怪的 System.out.println(rs.next()); try { rs.previous(); // OB和Mysql都不支持因为是 Result set of type is ResultSet.TYPE_FORWARD_ONLY } catch (SQLException e) { System.out.println(e); } try { rs.beforeFirst(); // OB和Mysql都不支持因为是 Result set of type is ResultSet.TYPE_FORWARD_ONLY } catch (SQLException e) { System.out.println(e); } try { rs.afterLast(); // OB和Mysql都不支持因为是 Result set of type is ResultSet.TYPE_FORWARD_ONLY } catch (SQLException e) { System.out.println(e); } try { rs.close(); } catch (SQLException e) { System.out.println(e); } try { System.out.println(stmt.executeUpdate("INSERT INTO table0_0 VALUES ('ID1', 1, 10.5, 100);")); } catch (SQLException e) { System.out.println(e); } try { System.out.println(stmt.executeUpdate("UPDATE table0_0 SET Value0 = 200 WHERE Id = 'ID2';")); } catch (SQLException e) { System.out.println(e); } try { stmt.executeQuery("SELECT * FROM non_existent_table;"); } catch (SQLException e) { System.out.println(e); } conn.setAutoCommit(false); savepoint = conn.setSavepoint("SP2"); System.out.println(stmt.executeUpdate("UPDATE table0_0 SET Value1 = 15.5 WHERE Id = 'ID3';")); try { conn.rollback(savepoint); } catch (SQLException e) { System.out.println(e); } try { conn.commit(); } catch (SQLException e) { System.out.println(e); } rs = stmt.executeQuery("SELECT * FROM table0_0 WHERE Value0 > 1 OR Id != 'ID2';"); //try{ //rs.setFetchSize(2147483647); //} catch (Exception e){ // System.out.println("ERROR3!!!!!!!!!!!!!!!!!"); // System.out.println(e); //} System.out.println(rs.next()); System.out.println(rs.getObject("Id")); System.out.println(rs.getObject("Value0")); System.out.println(rs.getObject("Value1")); System.out.println(rs.getObject("Value2")); try { System.out.println("rs.ifFirst(): " + rs.isFirst()); //这里Mysql输出了true System.out.println("rs.isLast(): " + rs.isLast()); //这里mysql输出了false } catch (Exception e) { System.out.println(e + "这两个方法OB报错"); //java.sql.SQLException: Invalid operation on STREAMING ResultSet } System.out.println("ERROR 1 " + rs.isBeforeFirst()); //这里mysql、OB输出的是false System.out.println("ERROR 2 " + rs.isAfterLast()); // 这里mysql、OB输出的是false try { rs.close(); //这里OB直接执行 } catch (SQLException e) { System.out.println(e); } System.out.println(stmt.getResultSetConcurrency()); System.out.println(stmt.getResultSetType()); System.out.println(stmt.getResultSetHoldability()); pstmt = conn.prepareStatement("SELECT * FROM table0_0 WHERE Value0 > ?"); pstmt.setObject(1, 2); rs = pstmt.executeQuery(); System.out.println(rs.next()); System.out.println(rs.getObject(1)); System.out.println(rs.getObject(2)); System.out.println(rs.getObject(3)); System.out.println(rs.getObject(4)); try { rs.close(); } catch (SQLException e) { System.out.println(e); } System.out.println(stmt.getQueryTimeout()); stmt.setQueryTimeout(120); System.out.println(stmt.getMaxRows()); stmt.setMaxRows(500); System.out.println(stmt.getFetchSize()); try { stmt.setFetchSize(2147483647); } catch (Exception e){ System.out.println("ERROR BIG !!!!!!!!!!!!!!!!!" + e); //System.out.println(e); } rs = stmt.executeQuery("SELECT * FROM table0_0;"); try{ rs.setFetchDirection(1001); //Mysql和OB都报错了,OB报错:Invalid operation. Allowed direction are ResultSet.FETCH_FORWARD and ResultSet.FETCH_UNKNOWN } catch (SQLException e) { System.out.println(e); } System.out.println(rs.next()); try{ rs.previous(); // 这里也是 } catch (Exception e){ System.out.println("mysql报错:Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.,OB 报错Invalid operation on STREAMING ResultSet。"); } try { rs.beforeFirst(); } catch (SQLException e) { System.out.println("Mysql 报错Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY. OB 报错Invalid operation on STREAMING ResultSet"); } try{ rs.afterLast(); // 这里也是 } catch (SQLException e) { System.out.println(" OB1 !!! Invalid operation on STREAMING ResultSet mysql报错:Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY"); } try { rs.close(); } catch (SQLException e) { System.out.println(e); } conn.setAutoCommit(false); savepoint = conn.setSavepoint("SP3"); System.out.println(stmt.executeUpdate("UPDATE table0_0 SET Value2 = 150 WHERE Id = 'ID4';")); try { conn.rollback(savepoint); } catch (SQLException e) { System.out.println(e); } try { conn.commit(); } catch (SQLException e) { System.out.println(e); } rs = stmt.executeQuery("SELECT * FROM table0_0 WHERE Value1 > 20.0 AND Value2 < 400;"); try{ rs.setFetchSize(-2147483648); } catch (Exception e){ System.out.println("ERROR4!!!!!!!!!!!!!!!!! OB 的 rs.setFetchSize(-2147483648) 报错" + e); } System.out.println(rs.next()); System.out.println(rs.getObject("Id")); System.out.println(rs.getObject("Value0")); System.out.println(rs.getObject("Value1")); System.out.println(rs.getObject("Value2")); try { System.out.println(rs.isFirst()); } catch (Exception e){ System.out.println("rs.isFirst() : OB Invalid operation on STREAMING ResultSet" + e); // System.out.println(e); } try { System.out.println(rs.isLast()); } catch (Exception e){ System.out.println("rs.isLast() : OB Invalid operation on STREAMING ResultSet" + e); //System.out.println(e); } System.out.println(rs.isBeforeFirst()); System.out.println(rs.isAfterLast()); try { rs.close(); } catch (SQLException e) { System.out.println(e); } try { System.out.println(stmt.executeUpdate("UPDATE table0_0 SET Value0 = -200 WHERE Id = 'ID2';")); } catch (SQLException e) { System.out.println(e); } try { stmt.executeQuery("SELECT invalid_column FROM table0_0;"); } catch (SQLException e) { System.out.println(e); } // try { // stmt.executeQuery("SELECT * FROM table0_0 WHERE invalid_condition;"); // } catch (SQLException e) { // System.out.println(e); // } try { rs.close(); } catch (SQLException e) { System.out.println(e); } try { stmt.close(); } catch (SQLException e) { System.out.println(e); } try { pstmt.close(); } catch (SQLException e) { System.out.println(e); } try { conn.close(); } catch (SQLException e) { System.out.println(e); } } }