Как определить успешность вставки или обновления с использованием Java и MySQL?

Я использую Java для подключения к базе данных MySQL. Я пытаюсь вставить или обновить данные в базу данных.

Хотя я совершенно уверен, что вставка прошла успешно, она возвращает false.

Согласно «выполняемому» API, возвращаемое значение «истинно, если первый результат является объектом ResultSet; ложно, если это счетчик обновлений или результатов нет».

Как я могу определить, была ли моя вставка или обновление успешной?

    public boolean insertSelections(String selection, String name){
        String sql ="INSERT INTO WORKREPORT VALUES (?,?,?,?,?)";
        boolean action = false;
        try {
            PreparedStatement stmt = conn.prepareStatement(sql);
            SimpleDateFormat dateFormat =  new java.text.SimpleDateFormat("yyyy:MM:dd hh:mm:ss");
            String formatDate = dateFormat.format(new java.util.Date(System.currentTimeMillis())); 
            java.util.Date mDate = dateFormat.parse(formatDate);
            java.sql.Timestamp timeStamp = new java.sql.Timestamp(System.currentTimeMillis());
//          Date time= new Date(mDate.getTime());

            stmt.setInt(1, Integer.parseInt(getNumberByName(name).trim()));
            stmt.setString(2, name);
//          stmt.setDate(3, time);
            stmt.setTimestamp(3, timeStamp);
            stmt.setString(4, selection);
            stmt.setString(5, "N/A");
            action = stmt.execute();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
        return action;
    }

person user3239558    schedule 24.06.2014    source источник
comment
Попробуйте с stmt.executeUpdate(); для вида Update op(INSERT, UPDATE, DELETE).   -  person Wundwin Born    schedule 24.06.2014


Ответы (4)


Поскольку вы используете PreparedStatement, вы можете вызвать executeUpdate() -

 int count = stmt.executeUpdate();
 action = (count > 0); // <-- something like this.

Из приведенной выше ссылки Javadoc (Returns) с добавленным выделением:

либо (1) количество строк для инструкций SQL Data Manipulation Language (DML) или (2) 0 для инструкций SQL, которые ничего не возвращают.

Если вы хотите вставить большое количество записей, я бы предпочел addBatch() и executeBatch().

person Elliott Frisch    schedule 24.06.2014

В первую очередь это вы должны знать:

boolean execute() Выполняет оператор SQL в этом объекте PreparedStatement, который может быть оператором SQL любого типа.

ResultSet executeQuery() Выполняет запрос SQL в этом объекте PreparedStatement и возвращает объект ResultSet, сгенерированный запросом.

int executeUpdate() Выполняет оператор SQL в этом объекте PreparedStatement, который должен быть оператором SQL INSERT, UPDATE или DELETE; или оператор SQL, который ничего не возвращает, например оператор DDL.

        int i = stmt.executeUpdate();
        if (i > 0) {
            System.out.println("success");
        } else {
            System.out.println("stuck somewhere");
        }

Попробуйте это и проверьте, происходит ли вставка или нет

person SparkOn    schedule 24.06.2014

Если вы не получили исключение, я думаю, что запрос прошел нормально. Или вы можете использовать executeUpdate() (http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#executeUpdate%28%29 )

Вы можете сделать select count(*) и проверить количество записей, если хотите.

person Viraj    schedule 24.06.2014
comment
В настоящее время я выполняю запрос на удаление, который должен удалить 1 запись в моем тесте. Запрос проходит, однако он возвращает 0 измененных записей. Поэтому это не правильно. SELECT count(*) будет работать, но это не обязательно. - person Mathieu Brouwers; 15.11.2017
comment
@Mathieu Brouwers Это не подходит для оператора обновления и удаления, но для оператора вставки он должен работать. Если вы не получили исключение, это означает, что запрос на вставку прошел нормально. Пожалуйста, дайте мне знать, если я что-то упустил о запросах на вставку. - person S Kumar; 04.07.2018

Попробуйте это, хотите ли вы знать, вставлены ли данные или нет, если запись вставлена, она возвращает true или false.

  if(action > 0){
      return true;
    }else{
      return false;
      }
person Pradeep Ramisetti    schedule 29.06.2016