#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