【问题标题】:How do you determine if an insert or update was successful using Java and MySQL?如何使用 Java 和 MySQL 确定插入或更新是否成功?
【发布时间】:2014-08-14 05:19:45
【问题描述】:

我正在使用 Java 连接到 MySQL 数据库。我正在尝试将数据插入或更新到数据库中。

即使我很确定插入成功,它也会返回 false。

根据“execute” 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;
    }

【问题讨论】:

  • stmt.executeUpdate(); 试试Update op(INSERT, UPDATE, DELETE)

标签: java mysql jdbc insert-update


【解决方案1】:

首先你应该知道:

布尔执行() 执行此 PreparedStatement 对象中的 SQL 语句,可以是任何类型的 SQL 语句。

结果集 executeQuery() 在此 PreparedStatement 对象中执行 SQL 查询,并返回查询生成的 ResultSet 对象。

int executeUpdate() 执行此 PreparedStatement 对象中的 SQL 语句,该语句必须是 SQL INSERT、UPDATE 或 DELETE 语句;或不返回任何内容的 SQL 语句,例如 DDL 语句。

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

试试这个并检查插入是否发生

【讨论】:

    【解决方案2】:

    试试这个,你是否想知道数据是否被插入,如果记录被插入它返回true或者false。

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

    【讨论】:

      【解决方案3】:

      由于您使用的是PreparedStatement,您可以致电executeUpdate() -

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

      来自上面的 Javadoc (Returns) 链接,已添加重点,

      对于 SQL 数据操作语言 (DML) 语句或 (2) 对于不返回任何内容的 SQL 语句,行数

      如果要插入大量条目,我更喜欢addBatch()executeBatch()

      【讨论】:

        【解决方案4】:

        如果您没有收到异常,我认为查询正常。 或者,您也许可以使用 executeUpdate() (http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#executeUpdate())

        如果需要,您可以执行 select count(*) 验证记录数。

        【讨论】:

        • 我目前正在运行一个删除查询,它应该在我的测试中删除 1 条记录。查询确实通过了,但是它确实返回了 0 个更改的记录。因此这是不正确的。 SELECT count(*) 可以,但不是必需的。
        • @Mathieu Brouwers 它不适用于更新和删除语句,但对于插入语句它应该可以工作。如果您没有收到异常,则表示插入查询正常。如果我遗漏了有关插入查询的任何内容,请告诉我。
        猜你喜欢
        • 1970-01-01
        • 2015-04-01
        • 2010-12-12
        • 1970-01-01
        • 2010-10-18
        • 2011-08-31
        相关资源
        最近更新 更多