Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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_Sql_Jdbc_Db2 - Fatal编程技术网

Java 比较两个不同表的两个结果集

Java 比较两个不同表的两个结果集,java,sql,jdbc,db2,Java,Sql,Jdbc,Db2,在下面的代码中,我比较了S_R_VAL和R_VAL表的两个结果集。我需要比较S_NUMBER(来自S_R_VAL表)和S_NO(来自R_VAL表)。 进行比较时,我发现此错误“java.lang.RuntimeException:两个结果集包含不同的列数!。请帮助修复此错误 String SSQ = "select DISTINCT S_NUMBER from OTG.S_R_VAL" + " WHERE R_TS = (SELECT M

在下面的代码中,我比较了S_R_VAL和R_VAL表的两个结果集。我需要比较S_NUMBER(来自S_R_VAL表)和S_NO(来自R_VAL表)。 进行比较时,我发现此错误“java.lang.RuntimeException:两个结果集包含不同的列数!。请帮助修复此错误

    String SSQ = "select DISTINCT S_NUMBER from OTG.S_R_VAL" +
                        "  WHERE R_TS = (SELECT MAX(R_TS) FROM OTG.S_R_VAL) order by S_NUMBER";

          String SDS = "SELECT DISTINCT S_NUMBER FROM OTG.S_R_VAL AS STG WHERE S_NUMBER NOT IN" +

                                     "(SELECT S_NO FROM OTG.R_VAL AS REV WHERE STG.S_NUMBER = REV.S_NO )";

          String SSR = "SELECT DISTINCT S_NO FROM OTG.R_VAL where S_NO != 'NULL' order by S_NO";

          String SSO =  "Select O_UID from OTG.OPTY where C_S_NO IN" +

         "( SELECT DISTINCT S_NUMBER FROM OTG.S_R_VAL AS STG WHERE S_NUMBER NOT IN(SELECT S_NO FROM OTG.R_VAL AS REV WHERE STG.S_NUMBER = REV.S_NO ))";

          //Statement statement;

        try {

             connection = DatabaseConnection.getCon();

             statement = connection.createStatement();

             statement1 = connection.createStatement();

          ResultSet SQ = statement.executeQuery(SSQ);

          ResultSet DS = statement.executeQuery(SDS);

          ResultSet SR = statement.executeQuery(SSR);

          ResultSet SO = statement.executeQuery(SSO);


                while (rs.next() && SR.next(){

                    String res1 = rs.getString("S_NUMBER");

                    String res2 = SR.getString("S_NO");

                    StringBuffer updateQuery = new StringBuffer();


                  if (res1.equals(res2)) {
            throw new RuntimeException(String.format("%s and %s aren't equal at common position %d",
                    res1, res2));

                }else 
                {
                     throw new RuntimeException("The two ResultSets contains different number of columns!");
                }
            }

            connection.commit();

不能重复使用相同的
语句
对象,因为在每个新的
executeQuery()
上,如果已经打开,则调用任何
ResultSet
,隐式关闭

当生成ResultSet对象的语句对象关闭、重新执行或用于从多个结果序列中检索下一个结果时,ResultSet对象将自动关闭


查看Java文档。

您不能重复使用相同的
语句
对象,因为在每个新的
executeQuery()
上,如果已经打开的结果集是隐式关闭的,则调用任何
ResultSet

当生成ResultSet对象的语句对象关闭、重新执行或用于从多个结果序列中检索下一个结果时,ResultSet对象将自动关闭


查看Java文档。

Ravi,你能告诉我应该在哪里修复它吗?以及如何修复?@123HIS而不是使用相同的
语句
使用相同的
连接创建四个不同的实例。createStatement()
调用。记住在循环结束时也关闭它们。Ravi,你能告诉我应该在哪里修复它吗?以及如何修复吗?@123HIS而不是使用相同的
语句
使用相同的
连接创建四个不同的实例。createStatement()
调用。记住在循环结束时也要关闭它们。您的代码看起来很奇怪。您将5列(
SSQ
)的结果与1列(
SSR
)的结果进行比较-您只将
S_NUMBER
S_NO
进行比较,使用单个SQL查询可以更有效地完成此操作(例如,使用除运算符以外的
运算符)。逐行执行此操作,尤其是在没有排序依据的情况下执行此操作,很可能无法正常工作。您好,您好,您是正确的。我正在将S_编号与S_编号进行比较。您能否帮助以正确的方式修复这些问题?这是一个结果错误。在进行比较时,您的代码似乎非常奇怪。您正在将结果与5列(
SSQ
)进行比较对于一列(
SSR
)的结果-您只需将
S_编号
S_编号
进行比较,使用单个SQL查询(例如,使用
EXCEPT
运算符)可以更有效地完成此操作。逐行执行此操作,尤其是在没有排序依据的情况下,很可能无法正常工作。您好,是的,您是正确的。我正在比较S_编号和S_编号。您能否帮助以正确的方式解决这些问题?这会导致错误。。比较时。