2013-08-24 7 views
1

В приведенном ниже коде я сравниваю два набора результатов таблиц 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(); 
+0

Ваш код кажется очень странным. Вы сравниваете результат с 5 столбцами ('SSQ') с результатом с 1 столбцом (' SSR') - вы только сравниваете 'S_NUMBER' с' S_NO'. Это можно сделать гораздо эффективнее с использованием одного SQL-запроса (например, с оператором 'EXCEPT'). Выполнение этой строки за строкой, особенно без «ЗАКАЗА BY», скорее всего, будет работать неправильно. –

+0

Hi, Ya, u r правильный. Я сравниваю S_NUMBER с S_NO. Можете ли вы, пожалуйста, помочь, как правильно их исправить? Появляется ошибка .. когда, сравнение. – 123HIS

ответ

1

Вы не можете использовать тот же объект Statement!.. потому что на каждом новом executeQuery() вызове любой ResultSet если уже открыт неявно закрыт.

объект ResultSet автоматически закрывается при себе объект, который генерируется он закрывается, повторно выполняется, или используется для получения следующего результата от Последовательность из несколько результатов.

Ознакомьтесь с JavaDocs для ResultSet.

+0

Рави, Может, пожалуйста, покажи мне, где я могу это исправить? и как? – 123HIS

+0

@ 123HIS Вместо того, чтобы использовать один и тот же 'statement', создайте четыре разных экземпляра, используя один и тот же вызов' connection.createStatement() '. Не забудьте закрыть их, когда закончится цикл. –

Смежные вопросы