Как узнать, если SQL-оператор выполняется в Java? - PullRequest
2 голосов
/ 16 марта 2011

Я хочу знать, действительно ли этот оператор удаления что-то удалил.Код ниже всегда выполняет else.Было ли это что-то удалено или нет.Как правильно это сделать?

public Deleter(String pname, String pword) {

        try {
            PreparedStatement createPlayer = conn.prepareStatement("DELETE FROM players WHERE P_Name='"+ pname +"' AND P_Word='" + pword + "'");
            createPlayer.execute();

            if(createPlayer.execute()==true){

            JOptionPane.showMessageDialog(null, "Player successfully deleted!");

            }else{

                 JOptionPane.showMessageDialog(null, "Player does not exist!", "notdeleted", JOptionPane.ERROR_MESSAGE);
            }

        } catch (Exception e) {
        }
    }

Ответы [ 4 ]

9 голосов
/ 16 марта 2011

Вы фактически выполняете оператор delete дважды, поскольку вы вызываете .execute() дважды. В большинстве случаев вряд ли у вас будут данные, которые могут быть удалены оператором, если вы запустите его почти сразу же во второй раз.

Вместо этого используйте метод executeUpdate() , который возвращает вам количество измененных строк:

int rowsAffected = createPlayer.executeUpdate();

if(rowsAffected > 0) {
   JOptionPane.showMessageDialog(null, "Player successfully deleted!");
}
else{
    JOptionPane.showMessageDialog(null, "Player does not exist!", "notdeleted", JOptionPane.ERROR_MESSAGE);
}
6 голосов
/ 16 марта 2011

Использовать executeUpdate . Он возвращает параметр int, сообщающий количество затронутых строк. Кроме того, будьте осторожны, в вашем коде вы выполняете оператор дважды.

2 голосов
/ 16 марта 2011

Вам следует заменить createPlayer.execute ();для createPlayer.executeUpdate, который возвращает целое число, представляющее число строк, которые были затронуты.Что вам нужно сделать, это сохранить это в int, а затем сравнить, если это 0.

1 голос
/ 16 марта 2011

Используйте executeUpdate () для получения количества строк.

Также некоторые основные элементы нуждаются в исправлении в вашем коде:

  • Вы неправильно используете PreparedStatement.Вместо этого используйте параметры.
  • Не глотайте исключения.По крайней мере, напечатайте трассировку стека, но было бы неплохо показать сообщение пользователю.
  • Вы выполняете оператор дважды.Просто сделайте это один раз в своем заявлении if.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...