2013-11-15 49 views
1

我想通过JDBC,它具有结构简单,以执行存储过程:JDBC PreparedStatement,如何选择和插入?

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 

任何想法?谢谢

回答

1

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

CallableStatement cs = connection.prepareCall(query);

cs.execute();

你可以需要承诺在数据库中查看更改。

conn.commit();

+0

不幸的是,插入仍然不会发生 –

+0

我已经添加了conn.commit(),并且插入现在被执行,但由于某种原因而被执行了2次 –

+0

您可以放置​​所有代码吗?请 – maiklahoz

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. 
+0

我也试过了,同样的问题 –

+0

您是否遇到过异常? Plz也分享它。 – Arvind

+0

@TimofeiDavydik - 检查编辑是否有帮助? – SudoRahul

1

你应该使用可调用语句,而不是事先准备好的声明中

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

不幸的是,插入仍然不会发生 –

+0

您应该执行语句并提交事务以使插入生效。 –