我正在尝试通过JDBC执行存储过程,它具有简单的结构:
ALTER PROCEDURE test
AS BEGIN
SELECT ...
INSERT ...
END
问题是插入未发生。当我在管理工作室执行此程序时,它就可以了。
String query = "EXEC test";
PreparedStatement st = conn.prepareStatement(query);
st.execute();
ResultSet rs = st.getResultSet(); //result set is correct
int count = st.getUpdateCount(); //returns -1
有什么想法吗?感谢
答案 0 :(得分:1)
由于您尝试调用的过程,您需要使用CallableStatement
。
用于执行SQL存储过程的接口。
CallableStatement callableStatement = conn.prepareCall(query);
此外,您的查询需要
String query = "{call test}";
// exec is used to execute the procedure from the sql console as such
// To execute a procedure using the java code, use call proc.
答案 1 :(得分:1)
你应该使用可调用语句而不是预备语句
CallableStatement cstmt = null;
try {
String SQL = "{call procedureName}";
cstmt = conn.prepareCall (SQL);
. . .
}
catch (SQLException e) {
. . .
}
finally {
. . .
}
答案 2 :(得分:1)
您可以尝试将查询值更改为String query = "{call test()}"
,然后您可以使用
CallableStatement cs = connection.prepareCall(query);
cs.execute();
您可能需要提交以查看数据库中的更改。
conn.commit();