JDBC调用函数,存储过程
/**
* 如何使用JDBC调用存储在数据库中的函数或存储过程
*/
@Test
public void testCallableStatement(){
Connection connection = null;
CallableStatement callableStatement = null;
try {
connection = Methods.getConnection();
//1.通过Connecton对象的prepareCall()
//方法创建一个CallableStatement对象的实例,
//在使用Connection对象的preparedCall()方法时,
//需要传入一个String类型的字符串,该字符串用于指明如何调用存储过程
//procedure-name:函数名
//arg:函数的参数
String sql = "{?=call <procedure-name>[(<arg1>,<arg2>,...)]}";
callableStatement = connection.prepareCall(sql);
//2.通过CallableStatement对象的
//reisterOutParamter()方法注册OUT参数
callableStatement.registerOutParameter(1, Types.NUMERIC);
callableStatement.registerOutParameter(3, Types.NUMERIC);
//3.通过CallableStatement对象的setXxx()方法设定IN或IN OUT参数的值
//null 可以使用setNull()方法
callableStatement.setInt(2,80);
//4.通过CallableStatement 对象execute()方法执行存储过程
callableStatement.execute();
//5.如果所谓用的是带返回参数的存储过程
//还需要通过CallableStatement对象的getXxx()方法获取其返回值
double sumSalary = callableStatement.getDouble(1);
long empCount = callableStatement.getLong(3);
} catch (Exception e) {
e.printStackTrace();
} finally {
Methods.release(null,connection,null);
}
}