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

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

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

В соответствии с API-интерфейсом "execute" возвращаемое значение "true", если первым результатом является объект ResultSet, false, если он является числом обновлений или результатов нет ".

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

    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;
    }

Ответы

Ответ 1

Поскольку вы используете 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().

Ответ 2

Прежде всего это вы должны знать:

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");
        }

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

Ответ 4

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

  if(action > 0){
      return true;
    }else{
      return false;
      }