#java #oracle
#java #Oracle
Вопрос:
Это мой код для Oracle database
обновления записи, которую я вставил, удалил и выполнил, но не обновил. Пожалуйста, подскажите мне, что не так в коде или в запросе.
Statement stmt;
try {
stmt = DBPRoject.conn.createStatement();
stmt.executeUpdate("update personinfo set cnic='" CnicNo "','name=" name "','login=" login "','password=" psd "','zip=" Zip "','persontypeid=" typeid "' where cnic=" CnicNo);
//stmt.executeQuery("update personinfo set cnic=" '" CnicNo "', '" name "', '" login "', '" psd "', '" Zip "', typeid );
stmt.executeQuery("commit");
stmt.executeQuery("update personcont set cnic='" CnicNo ", 'address=" HomeAdd "', 'city=" City "', 'statep=" State "', 'mobno=" MobNo "','email=" Email "','nationality=" Nationality "','persontypeid" typeid "','status" Status "' where cnic=" CnicNo);
stmt.executeQuery("commit");
JOptionPane.showMessageDialog(null, "Updated sucessfully");
}
catch(SQLIntegrityConstraintViolationException uni){
JOptionPane.showMessageDialog(null, "Enter Uniqe CNIC");
return;
}
catch (SQLException ex) {
Logger.getLogger(Add_Customer.class.getName()).log(Level.SEVERE, null, ex);
}
Я застрял на этом этапе, нужна помощь 🙂 заранее спасибо.
Ответ №1:
Первая проблема заключается в том, что вы, похоже, цитируете имя и значение столбца для некоторых ваших ограничений…
...'name=" name "','login=" login "','password=" psd "','zip=" Zip "','persontypeid=" typeid "' ...
^-------------^ ^---------------^ ^----------------^ ^-----------^ ^-----------------------^
Вторая проблема заключается в том, что вы должны использовать PreparedStament
для снижения риска внедрения SQL
Например…
try (PreparedStatement stmt = con.prepareStatement("update personinfo set cnic=?,name=?,login=?,password=?,zip=?,persontypeid=? where cnic=?")) {
stmt.setString(1, CnicNo);
stmt.setString(2, name);
stmt.setString(3, login);
stmt.setString(4, psd);
stmt.setString(5, Zip);
stmt.setString(6, typeid);
stmt.setString(7, CnicNo);
int rows = stmt.executeUpdate();
}
Кроме того, предполагая, что autoCommit
для него установлено значение false
для Connection
, вы должны просто иметь возможность использовать con.commit();
для фиксации обновлений вместо выполнения другого запроса, но это может быть особым требованием драйвера
Ответ №2:
Просто догадываюсь, поскольку вы не предоставили сообщение об ошибке, и содержимое ваших переменных не указано, но вы устанавливаете ‘ перед именем некоторых атрибутов, например 'name=" name "'
, может привести, например, к 'name=John'
, но правильный синтаксис таков name='John'
, что просто исправьте это во всех местах, где вы это делаете. Затем убедитесь, что вы не цитируете целочисленные значения.
Ответ №3:
Вы должны распечатать окончательный оператор SQL, чтобы войти в журнал и проверить наличие ошибки. Измените 'name=" name "'
на name='" name "'
для всех других полей.