Это правильный запрос для отправки в Oracle

UPDATE MY_TABLE SET COL_1=?, COL_2=? where COL_3=? AND COL_4=?

и я посылаю точное количество значений в массиве в Statement(в моем случае: 4). При этом я получаю исключение: отсутствует индекс IN или OUT в index:: 4

Примечание: я думаю, что мы не можем сделать SET COL_1=?,COL_2=? нам нужно сделать SET COL_1='DESIRED_VALUE',COL_2='DESIRED_VALUE' Это мое заблуждение?

Java-код

StringBuilder updateQuery=new StringBuilder("UPDATE MY_TABLE SET COL_1=?, COL_2=? where BOOKMARKID_ACT=? AND DIMID_ACT=?");         
ArrayList<Object> alObjectData=new ArrayList<Object>();
alObjectData.add("VALUE1");
alObjectData.add("VALUE2");
alObjectData.add("VALUE3");
alObjectData.add("VALUE4");
dpQuery.executeUpdate(connTemp, updateQuery.toString(), alObjectData);

1 ответ

Решение

Я думаю, что вы хотите создать PreparedStatement, Это должно выглядеть так:

// con is your active connection

String sqlStatement = "UPDATE MY_TABLE SET COL_1=?, COL_2=? where BOOKMARKID_ACT=? AND DIMID_ACT=?";
PreparedStatement prest = con.prepareStatement(sqlStatement);
prest.setString(1, valueFirstParam);
prest.setString(2, valueSecondParam);
prest.setString(3, valueThirdParam);
prest.setString(4, valueFourthParam);
prest.executeUpdate();

Вы также должны добавить эту строку в верхней части класса

import java.sql.*;

PreparedStatements избежать вашего кода от SQL инъекций.

больше по этой ссылке

Другие вопросы по тегам