Оператор обновления Oracle в java

#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 "' для всех других полей.