web-dev-qa-db-ja.com

JavaおよびMySQLを使用して、挿入または更新が成功したかどうかをどのように判断しますか?

MySQLデータベースに接続するためにJavaを使用しています。データベースにデータを挿入または更新しようとしています。

挿入が成功したと確信していますが、falseを返します。

「実行」APIによると、戻り値は「最初の結果がResultSetオブジェクトである場合はtrue、更新カウントであるか結果がない場合は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;
    }
20
user3239558

PreparedStatement を使用しているため、executeUpdate()を呼び出すことができます-

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

上記のJavadoc(Returns)リンクから、強調が追加され、

(1)therow countSQL Data Manipulation Language(DML)ステートメントまたは(2)何も返さないSQLステートメントの場合は0。

多数のエントリを挿入する場合は、 addBatch() および executeBatch() を選択します。

26
Elliott Frisch

まず最初に知っておくべきこと:

boolean execute()このPreparedStatementオブジェクト内のSQLステートメントを実行します。これは、あらゆる種類のSQLステートメントである可能性があります。

ResultSet executeQuery()このPreparedStatementオブジェクトでSQLクエリを実行し、クエリによって生成されたResultSetオブジェクトを返します。

int executeUpdate()このPreparedStatementオブジェクト内のSQLステートメントを実行します。これは、SQLのINSERT、UPDATE、またはDELETEステートメントでなければなりません。または、DDLステートメントなど、何も返さないSQLステートメント。

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

これを試して、挿入が発生しているかどうかを確認してください

14
SparkOn

これを試してください。データが挿入されているかどうかを知りたい場合、レコードが挿入されている場合はtrueまたはfalseを返します。

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

例外が発生しない場合、クエリは正常に実行されたと思います。または、executeUpdate()を使用できる場合があります( http://docs.Oracle.com/javase/7/docs/api/Java/sql/PreparedStatement.html#executeUpdate()

必要に応じて、select count(*)を実行してレコード数を検証できます。

0
Viraj