//创建一个求两个整数和的存储过程
CREATE PROCEDURE db2admin.SUM(IN p_p1 INT, IN p_p2 INT, OUT p_sum INT)
LANGUAGE SQL
SPECIFIC SUM_ab
DYNAMIC RESULT SETS 1
p1:BEGIN
set p_sum = p_p1 + p_p2;
END p1
JAVA调用存储过程的代码如下(部分):
//连接DB2数据库所需参数
private static final String DB2DRIVER = "com.ibm.db2.jcc.DB2Driver";
private static final String DBURL = "jdbc:db2://localhost:50000/MYDB";
private static final String USER = "db2admin";
private static final String PASSWORD = "ABC123abc";
//...
//具体连接和调用存储过程实现
Connection conn = null;
try {
Class.forName(DB2DRIVER);
conn = DriverManager.getConnection(DBURL, USER, PASSWORD);
//CALL PROCEDURE DB2ADMIN.SUM(INT,INT,?)
String sql = "CALL DB2ADMIN.SUM(?,?,?)";
CallableStatement cs = conn.prepareCall(sql);
cs.setInt(1,2);
cs.setInt(2,3);
cs.registerOutParameter(3,Types.INTEGER);//指明OUT参数的类型
cs.execute();
int sum = cs.getInt(3); //获取OUT参数的信息
System.out.println("sum(2,3)="+ sum);
} catch(Exception e) {
if(conn != null) {
try {
conn.rollback();
}catch(Exception xe) {
System.out.println(xe);}
}
System.out.println(e);
} finally {
try {
if(conn != null) {
conn.close();
conn = null;
}
}catch(Exception ye) {
System.out.println(ye);
}
}
}
CallableStatement接口的说明:
public interface CallableStatementextends PreparedStatement
用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,则必须将其注册为 OUT 参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个参数的编号是 1。
{?= call [(,, ...)]}
{call [(,, ...)]}
IN 参数值是使用继承自 PreparedStatement 的 set 方法设置的。在执行存储过程之前,必须注册所有 OUT 参数的类型;它们的值是在执行后通