Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC PreparedStatement,如何选择和插入?_Java_Sql_Sql Server_Stored Procedures_Jdbc - Fatal编程技术网

Java JDBC PreparedStatement,如何选择和插入?

Java JDBC PreparedStatement,如何选择和插入?,java,sql,sql-server,stored-procedures,jdbc,Java,Sql,Sql Server,Stored Procedures,Jdbc,我试图通过JDBC执行存储过程,它的结构很简单: ALTER PROCEDURE test AS BEGIN SELECT ... INSERT ... END 问题是插入没有发生。当我在ManagementStudio中执行此过程时,一切正常 String query = "EXEC test"; PreparedStatement st = conn.prepareStatement(query); st.execute(); ResultSet rs = st.getResultSet(

我试图通过JDBC执行存储过程,它的结构很简单:

ALTER PROCEDURE test
AS BEGIN
SELECT ...
INSERT ...
END
问题是插入没有发生。当我在ManagementStudio中执行此过程时,一切正常

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

有什么想法吗?谢谢

因为这是您试图调用的过程,所以您需要使用

用于执行SQL存储过程的接口

此外,您的查询需要

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.

您应该使用可调用语句而不是预处理语句

CallableStatement cstmt = null;
try {
   String SQL = "{call procedureName}";
   cstmt = conn.prepareCall (SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}

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

CallableStatement cs=connection.prepareCall(查询)

cs.execute()

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

conn.commit()


你遇到什么异常情况了吗?这段代码也可以,我的意思是没有例外,但是insert仍然没有发生。insert仍然没有发生。您应该执行语句并提交事务,insert才能生效。不幸的是,insert仍然没有发生。我已经添加了conn.commit(),insert现在执行,但出于某种原因,我有两次对不起,是我的错。调用在不同的位置执行了2次。我已经将自动提交设置为true,现在工作正常。谢谢你!
CallableStatement cstmt = null;
try {
   String SQL = "{call procedureName}";
   cstmt = conn.prepareCall (SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}