Я пытаюсь сделать ТАБЛИЦУ COMPB эквивалентным TABLE COMPA с помощью операций обновления и удаления в таблице COMPB на основе таблицы COMPA. Код работает отлично, создавая правильный SQL. Проблема в том, что момент я ставлю оператор выполнения, как показано ниже, в то время как цикл завершает первую итерацию. Невозможно понять это поведение ResultSet в java. Любая помощь здесь? Где я ошибаюсь?While Loop Terminating after ResultSet.execute
//Comparision between Minus Table(seta) and COMPB (setc)
//ID Contains Primary Key of COMPB Table
ResultSet seta=stmt.executeQuery("select * from COMPA minus select * from COMPB");
while(seta.next())
{
String insert="";
String update="";
boolean contains=ArrayUtils.contains(ID, seta.getInt(1));
if (contains==true)
{
update="Update COMPB SET COMPB.EMPNAME='"+seta.getString(2)+"',COMPB.EMAILID='"+seta.getString(3)+"' where "+seta.getInt(1)+"=COMPB.EMPID";
stmt.executeUpdate(update);
System.out.println(update);
}
else
{
insert="Insert INTO COMPB values ("+seta.getInt(1)+" , '"+seta.getString(2)+"' , '"+seta.getString(3)+"')";
stmt.executeUpdate(insert);
System.out.println(insert);
}
}
Я полагаю, вам не нравится повторное использование 'stmt' для последующих вызовов' executeUpdate() ', но какая отладка вы сделали? Что получает исходный запрос, если вы запускаете его вручную - при условии, что все изменения во всех сеансах совершены? Кроме того, зачем использовать циклы вместо одного оператора слияния; и если вы должны использовать циклы, почему вы не используете подготовленные операторы и связываете переменные? –
Спасибо Алекс. Проблема повторного использования stmt внутри цикла была проблемой. Я еще не понял, как это может разрушить цикл while. Но сейчас я исправил это. –
Я настоятельно рекомендую вам прекратить соединять значения в строку запроса, вместо этого используйте подготовленный оператор с записями параметров. Ваш текущий код небезопасен и уязвим для SQL-инъекции. –