Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自动提交开关的复杂性_Java_Mysql_String - Fatal编程技术网

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”等吗。?而且,似乎几乎没有什么可承诺的,因为只有选择。您想要实现什么?欢迎使用堆栈溢出。当询问错误时,最好尝试确定问题中出现错误的源代码行。为什么要提交?