Java 自动提交开关的复杂性
当我运行我的代码时,我只是不断得到错误: “结果集未打开。请确认自动提交已关闭。” 我怎样才能修好它 我不能让它工作。我确信这与Java 自动提交开关的复杂性,java,mysql,string,Java,Mysql,String,当我运行我的代码时,我只是不断得到错误: “结果集未打开。请确认自动提交已关闭。” 我怎样才能修好它 我不能让它工作。我确信这与con.setautocommit(false)有关或执行程序 package database_console; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Arrays; import java.u
con.setautocommit(false)有关代码>或执行程序
package database_console;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import static jdk.nashorn.internal.objects.NativeString.split;
import java.sql.*;
import java.sql.ResultSet;
import java.util.Random;
public class Database_console {
public static void main(String[] args) {
String url = "jdbc:derby://localhost:1527/English Words";
try {
String host = "jdbc:derby://localhost:1527/English Words";
String uName = "User";
String uPass= "password";
Connection con = DriverManager.getConnection(host, uName, uPass);
con.setAutoCommit(false);
Statement stmt = con.createStatement();
String SQL1 = "SELECT * FROM ENGLISH_1";
String SQL2 = "SELECT * FROM ENGLISH_2";
String SQL3 = "SELECT * FROM ENGLISH_3";
String SQL4 = "SELECT * FROM ENGLISH_4";
String SQL5 = "SELECT * FROM ENGLISH_5";
ResultSet rs1 = stmt.executeQuery( SQL1);
ResultSet rs2 = stmt.executeQuery( SQL2);
ResultSet rs3 = stmt.executeQuery( SQL3);
ResultSet rs4 = stmt.executeQuery( SQL4);
ResultSet rs5 = stmt.executeQuery( SQL5);
while(rs1.next()) {
String 1 = rs1.getString("1");
String 2 = rs2.getString("2");
String 3 = rs3.getString("3");
String 4 = rs4.getString("4");
String 5 = rs5.getString("5");
con.commit();
System.out.println( 1 + " " + 2 + " " + 3 " " + 4 " " 5 + " ");
}
}
catch (SQLException err) {
System.out.println(err.getMessage());
}
}
}
两件事:首先,COMMIT关闭以begintransaction开始的事务。你没有这些
其次,当您使用JDBC执行SELECT语句时,您需要执行每个SQL语句,然后检索并关闭其结果集,然后再开始下一个SQL语句。您展示的代码尝试创建一组ResultSet对象,然后逐个读取它们。你不能那样做。™
重要提示:完成后不要忘记关闭()每个ResultSet。结果集可能是数据库服务器上的稀缺资源
例如,试试这个
String SQL1 = "SELECT col1, col2, col3 FROM ENGLISH_1";
String SQL2 = "SELECT col1, col2, col3 FROM ENGLISH_2";
Statement stmt = con.createStatement( );
ResultSet rs1 = stmt.executeQuery( SQL1 );
while(rs1.next()) {
String s1 = rs1.getString(1);
String s2 = rs1.getString(2);
String s3 = rs1.getString(3);
System.out.println( s1 + " " + s2 + " " + s3);
}
rs1.close();
ResultSet rs2 = stmt.executeQuery( SQL2 );
while(rs2.next()) {
String t1 = rs2.getString(1);
String t2 = rs2.getString(2);
String t3 = rs2.getString(3);
System.out.println( t1 + " " + t2 + " " + t3);
}
rs2.close();
请修复缩进、使代码可编译和堆栈后跟踪。确定要将变量命名为“1”、“2”等吗。?而且,似乎几乎没有什么可承诺的,因为只有选择。您想要实现什么?欢迎使用堆栈溢出。当询问错误时,最好尝试确定问题中出现错误的源代码行。为什么要提交?