statement.executeUpdate()始终返回1

时间:2012-12-20 12:37:32

标签: java sql oracle jdbc

我遇到JDBC executeUpdate()方法的问题。无论是否更新行,它始终返回1。据我所知,该方法应该返回0是没有行被改变。

以下是我的代码示例:

try {
conn = pool.getConnection();
        PreparedStatement ps = conn.prepareStatement("{CALL UPDATE_USER (?,?,?)}");
        ps.setString(1, field.toString());
        ps.setString(2, change);
        ps.setString(3, userID);
        int updated = ps.executeUpdate();
        System.out.println(updated);
        if(updated==0){
            throw new NoUserException();
        }
        ps.close();
    } catch (SQLException e) {
        log.error("An error occurred while creating the connection");
        e.printStackTrace();
    } finally {
        pool.returnConnection(conn);
    }

这可能是因为我正在使用预准备语句或存储过程吗?

这是存储过程:

create or replace
PROCEDURE UPDATE_USER
(
  updateColumn IN user_tab_columns.column_name%type,
  changeStr IN VARCHAR2,
  unID IN VARCHAR2
)
IS
BEGIN
  EXECUTE IMMEDIATE
    'UPDATE
      users
SET ' || updateColumn || '= :1
WHERE
  uniqueID = :2'
  USING changeStr, unID; 
END;

2 个答案:

答案 0 :(得分:2)

它无法从存储的proc执行中获取信息。如果你想获得行计数(或其他任何东西)切换PROCEDURE到FUNCTION,在这个函数中添加return子句,并将你的调用改为类似的? = CALL ...在函数内部使用sql%rowcount进行测试以获得受影响的行数。

答案 1 :(得分:0)

您可以使用Callable statement程序或功能。并返回受影响的行数作为返回参数