1

我正在尝试通过结构简单的 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

有任何想法吗?谢谢

4

3 回答 3

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.
于 2013-11-15T08:38:12.370 回答
1

您应该使用可调用语句而不是准备好的语句

CallableStatement cstmt = null;
try {
   String SQL = "{call procedureName}";
   cstmt = conn.prepareCall (SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}
于 2013-11-15T08:41:58.873 回答
1

您可以尝试将查询的值更改为String query = "{call test()}",然后您可以使用

CallableStatement cs = connection.prepareCall(query);

cs.execute();

您可能需要提交才能查看数据库中的更改。

conn.commit();

于 2013-11-15T08:42:58.353 回答