如何调用存储过程和准备好的声明
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何调用存储过程和准备好的声明相关的知识,希望对你有一定的参考价值。
在下面的代码中,我想调用一个存储过程并执行一个Query。我在statement.executeUpdate();
面临错误请帮助解决它。我不知道哪里出错了。
public void Dbexe() {
Connection connection;
connection = DatabaseConnection.getCon();
CallableStatement stmt;
try {
stmt = connection.prepareCall("{CALL optg.Ld_SOpp}");
stmt.executeUpdate();
stmt.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("Stored Procedure executed");
//PreparedStatement statement = null;
// ResultSet rs = null;
try{
PreparedStatement statement;
try {
statement = connection.prepareStatement("MERGE INTO OPTG.R_VAL AS TARGET USING" +
........... +
"");
statement.executeUpdate(); //Here the exception is thrown
statement.close();
connection.commit();
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// statement = connection.prepareStatement(query);
//statement.close();
}
finally{
System.out.println("Data is copied to the Table");
}
}
答案
一点偏离主题:如果你想调用商店程序,你应该使用CallableStatement
(参见documentation):
CallableStatement callableStatement = connection.prepareCall("{call opptymgmt.Load_SiebelOpportunity}");
ResultSet rs = callableStatement.executeQuery();
我还建议你查看这个主题How to properly clean up JDBC resources in Java?。这对我很有帮助。
更新:基于此堆栈跟踪:
com.ibm.db2.jcc.am.mo: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=MERGE INTO OPPTYMGMT.REVENUE_VALIDAT;BEGIN-OF-STATEMENT;<variable_set>, DRIVER=4.7.85
问题似乎在你试图执行的sql语句中。我的意思是,DB2是一个错误,而不是java。你应该检查你的sql语句。
以上是关于如何调用存储过程和准备好的声明的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中使用准备好的语句/存储过程时如何保护自己免受 SQL 注入?