Сравнение двух результирующих наборов в Java

#java #database #oracle #hibernate #jdbc

#java #База данных #Oracle #спящий режим #jdbc

Вопрос:

Каков наилучший способ обработки результирующего набора Java? Я создаю настольное приложение, которое будет подключаться к базе данных Oracle с помощью JDBC.

Однако у меня возникли проблемы с обработкой результирующих наборов, поскольку я не могу выполнить сравнение с использованием цикла for.

 // create a database connection object
DB db = new DB();

// get rows of my first table and second table
ResultSet firstRS = db.getMyFirstTable();
ResultSet seconRS = db.getSecondTable();

// compare the two tables
while(firstRS.next()) 
{
    // get the row of my first table
    String firstRSRow = firstRS.getString("col1");

    while(secondRS.next()) 
    {
        // get the row of my second table
        String secondRSRow = seconRS.getString("col1");

        // compare row from first table to the row in second table
        if(firstRSRow.startsWith(secondRSRow))
        {
            // do some processing here....
        } // end if
    } // end while
} // end while
  

Я знаю, что это можно было бы выполнить с помощью гибернации с помощью нескольких строк кода, но у меня нет времени на его изучение.

Я также нашел commons DBUtils из apache, но это кажется сложным для меня как начинающего программиста.

Есть ли другой способ / инструменты / библиотеки / фреймворк, достаточно простой, чтобы получить результирующий набор из баз данных и управлять им простым и понятным способом?

Я также буду признателен, если вы сможете направить меня на веб-сайт, на котором есть примеры кодов, касающихся подключения к базе данных Java.

Большое вам спасибо за вашу поддержку.

Ответ №1:

Почему ResultSet ? Вы можете легко сравнивать значения с SELECT помощью инструкции. Если вы все еще хотите получить результирующий набор, подумайте о CachedRowSet.

Комментарии:

1. @user692533 — Лучше заполнить список<T> для определенного столбца и сравнить их.

Ответ №2:

 DB db = new DB();

 // get rows of my first table and second table
ResultSet firstRS = db.getMyFirstTable();
ResultSet seconRS = db.getSecondTable();

// compare the two tables
while(firstRS.next() || secondRS.next()) 
{
// get the row of my first table
String firstRSRow = firstRS.getString("col1");
String secondRSRow = seconRS.getString("col1")

    // compare row from first table to the row in second table
    if(firstRSRow.startsWith(secondRSRow))
    {
        // do some processing here....
    } // end if
} // end while
  

Ответ №3:

 public static boolean resultset(String SQL1, String SQL2){
    public boolean status=false;
    ResultSet ViewResultset = st.executeQuery(SQL1);
      ResultSet QueryResultset = st.executeQuery(SQL2);

      while (QueryResultset.next() | ViewResultset.next())
      if (ViewResultset.getRow() == 0   | QueryResultset.getRow() == 0) {
      break;
      } else {
         for (int i = 1; i < ViewResultset.getMetaData().getColumnCount()   1; i  ) {
            System.out.println("OOO"  QueryResultset.getMetaData().getColumnCount());
            String columnName = ViewResultset.getMetaData().getColumnName(i);
      System.out.println("ColumnName :"   columnName);
    for (int j = 1; j < QueryResultset.getMetaData().getColumnCount()   1; j  )
    if (ViewResultset.getMetaData().getColumnName(i).equals(QueryResultset.getMetaData().getColumnName(j))amp;amp; !(QueryResultset.getString(columnName) == null || ViewResultset.getString(columnName) == null))
    if (ViewResultset.getString(columnName).toUpperCase().contains(QueryResultset.getString(columnName).toUpperCase())) {
        System.out.println(" Actual "  ViewResultset.getMetaData().getColumnName(i)       " Expected: "  ViewResultset.getString(columnName));
        status=true;

    }      
    else {System.out.println(" Actual "  ViewResultset.getMetaData().getColumnName(i)       " Expected: "  ViewResultset.getString(columnName));
    }
    }
    }
    return status;
    } 
}
  

Ответ №4:

Результирующий набор — это подкласс Object в конечном счете, и мы можем сравнивать два или более объектов напрямую. Немного специфично для вашего вопроса:

  ResultSet rs=st.executeQuery(sql1);
 ResultSet rs1=st.executeQuery(sql2);
  

где sql1 и sql2 — это 2 оператора

  while(rs.next() amp;amp; rs1.next()){
     int a=rs.next();
     int b=rs1.next();
     if(a==b){
          System.out.println("Compairing two ResultSets");
     }
 }
  

Комментарии:

1. rs.next() возвращает логическое значение, а не значение int

2. #Шилан. Ты с ума сошел?. Я делился тем, как это сделать. Не для операторов кодирования.

3. Я полагаю, вы не поняли концепцию rs.next(). Когда вы проверяете, является ли rs.next() , вы уже переместили указатель перед записью, вызывая его снова, вы перемещаете указатель вперед и пропускаете первую запись! Более того, если вы хотите сравнить rs1 и rs!! Вы должны знать, что они являются объектами и не могут сравниваться как == . В принципе, я не вижу ни одного правильного утверждения в этом коде!

4. #Шилан. Ты думаешь, ты такой умный?. Может быть, вы слепой. Если вы считаете себя умным, просто дайте свой ответ на этот вопрос. Не указывайте на другие.

5. я достаточно умен, чтобы не отвечать, когда я ничего об этом не знаю: D