如果想用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(?,?)}");
假设数据库里有一个procedure inc( x in int , x2 out int),那么就可以call inc(?,?)来调用。怎么传参数呢?
cst.setString("x","123");
用 setxxxxx函数可以把某个类型的值指定到某个变量或者某个参数位置。
cst.registerOutParameter("x2", Types.INTEGER);
JAVA 不会知道你要返回的类型是什么,所以你得先注册,才能取得返回值。
cst.execute();
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);