不能在java中执行SQL存储过程

时间:2015-03-10 02:46:20

标签: java sql stored-procedures

我在SQL中有一个存储过程,它可以在SQL中运行而不会出现问题。但是当我使用Java来调用它时,代码可以运行但是无法调用存储过程。这是我的代码:

public int countPV(int value){
    Connection conn = null;
    ResultSet rs = null;

    try {
        conn = MyConection.getConnection();
        CallableStatement cstmt = conn.prepareCall("{call countPV(?)}");
        cstmt.setInt(1, value);
    } catch (Exception e) {
        e.printStackTrace();
        return 0;
    }finally{
        try {

            MyConection.closeConnection(conn, null, rs);
        } catch (Exception e) {
        }
    }
    return 1;

}

这是我在SQL中的存储过程:

CREATE procedure countPV (@pID int)
as
begin
WHILE (2>1)
BEGIN
    update tblUser
    set countx = countx + 1
    where ID = @pID
    SET @pID = (select parentID from tblUser where ID = @pID)
    if(@pID = (select parentID from tblUser where ID = @pID))
    break;
END
end

2 个答案:

答案 0 :(得分:0)

您需要在方法中调用CallableStatement#execute()

CallableStatement cstmt = conn.prepareCall("{call countPV(?)}");
cstmt.setInt(1, value);

cstmt.execute(); // MISSING!

答案 1 :(得分:0)

https://docs.oracle.com/javase/7/docs/api/java/sql/CallableStatement.html

由于CallableStatemnt正在扩展PreparedStatement,它继承了它的执行方法(execute,executeQuery,executeUpdate),就像正常的quires一样执行。

我建议对任何存储过程调用使用setQueryTimeout以避免超时问题。