如果想用java运行SQL,那么只要让conn返回的statement executeQuery(sql)就行了。
想执行存储过程,就得让conn返回一个CallableStatement,然后再它进行操作:
DriverManager.deregisterDriver( new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","scott","tiger");
CallableStatement cst =null;
cst = conn.prepareCall("{call inc(?,?)}");
1.调用procedure
假设数据库里有一个procedure inc( x in int , x2 out int),那么就可以call inc(?,?)来调用。怎么传参数呢?
2.给IN传入参数。
cst.setString("x","123");
用 setxxxxx函数可以把某个类型的值指定到某个变量或者某个参数位置。
3.设置OUT的类型
cst.registerOutParameter("x2", Types.INTEGER);
JAVA 不会知道你要返回的类型是什么,所以你得先注册,才能取得返回值。
4.运行存储过程
cst.execute();
5.取得返回值
cst.getInt("x2")
关于set和get,你会发现它有两种绑定参数的方法,一种是按照参数的名字,还有一种是按照参数的顺序编号1,2,3...。注意这两种方法只能选择一种,不能混用。
下面给出一个完整的调用 swap存储过程的代码,实现两个数交换。
int a,b;
a = 10;b=20;
cst.registerOutParameter(1, Types.INTEGER);
cst.registerOutParameter(1, Types.INTEGER);
cst.registerOutParameter(2, Types.INTEGER);
cst.setInt(1,a);
cst.setInt(2,b);
cst.execute();
a = cst.getInt(1);
b = cst.getInt(2);
System.out.println("a= "+a+" b = "+b);