返回受Java中SQL UPDATE语句影响的行数

Krt*_*lta 31 java mysql sql prepared-statement rowcount

我正在使用MySQL数据库并通过Java访问它.

PreparedStatement prep1 = this.connection.prepareStatement("UPDATE user_table 
                                                               SET Level = 'Super' 
                                                             WHERE Username = ?");
prep1.setString(1, username);
Run Code Online (Sandbox Code Playgroud)

上面的更新语句工作正常,但是我想获得受此语句影响的行数.这可能吗?

bra*_*ter 43

PreparedStatement上调用executeUpdate()应该返回一个int,即更新记录的数量.

  • 它实际上并不是更新记录的数量,而是遗憾的是匹配记录的数量.在我的设置(MySQL)中,当将值更新为相同值时,我得到1为executeUpdate()的返回值但是当我在Workbench中手动运行查询时,它说:0行受影响的行匹配:1已更改:0警告:0 (14认同)
  • 其实我遇到了这个问题.当我为值为X的列运行更新并尝试将其更新为X时,原始mysql查询在受影响的行时返回0但是,即使X从未更改,java prepared语句也会返回行数. (7认同)

Tre*_*son 43

Statement.executeUpdate()或者execute()后跟getUpdateCount()将返回根据JDBC规范匹配但未更新的行数.如果要更新计数,可以指定useAffectedRows=true非标准URL选项.更多信息可在此处获得.

  • 这是正确答案,接受一个是错误的. (9认同)

Lak*_*ana 5

  1. 首先,使用下面的构造函数准备'PreparedStatement'对象:

    PreparedStatement pStmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
    //here variable 'sql' is your query ("UPDATE user_table SET Level = 'Super' WHERE Username = ?") 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后,将您的参数设置为'pStmt'.在这种情况下:

    prep1.setString(1, username);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后,执行executeUpdate并将受影响的行作为整数获取

    int affectedRows = pStmt.executeUpdate();
    
    Run Code Online (Sandbox Code Playgroud)