我遇到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;
答案 0 :(得分:2)
它无法从存储的proc执行中获取信息。如果你想获得行计数(或其他任何东西)切换PROCEDURE到FUNCTION,在这个函数中添加return子句,并将你的调用改为类似的? = CALL ...在函数内部使用sql%rowcount进行测试以获得受影响的行数。
答案 1 :(得分:0)
您可以使用Callable statement程序或功能。并返回受影响的行数作为返回参数