Java调用Oracle存储过程
步骤:
1、编写Oracle存储过程;
2、编写数据库获取连接工具类;
3、编写简单应用调用存储过程。
实现:
1、Oracle存储过程
(省了,本文主要讲述怎么在java中调用存储过程)
在此假设此存储过程有三个参数,最后会返回一个游标。
2、数据库连接工具类
/**
* 数据库连接工具类
*/
public class DBUtil {
/**
* 连接工厂
*/
public static Connection makeConnection(){
Connection conn = null;
try {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:zfvdb", "root", "zfvims");
} catch (SQLException e) {
System.out.println("通过JDBC获取Oralce数据库链接对象出错!");
e.printStackTrace();
}
return conn;
}
/**
* 连接测试
*/
public static void main(String args[]){
if(DBUtil.makeConnection()==null){
System.out.println("获取数据库链接失败!");
}
System.out.println("JDBC获取Oracle数据库链接成功!");
}
}
3、调用存储过程
/**
* 调用存储过程测试
*/
public class Test {
/**
* 测试方法
*/
public void test(){
Connection conn = DBUtil.makeConnection();
String sql = "{call p_test(?,?,?)}";
CallableStatement cs;
try {
cs = conn.prepareCall(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY, ResultSet.HOLD_CURSORS_OVER_COMMIT);
cs.setLong(1, "1300");
cs.setString(2, "2006-01-01");
cs.setString(3, "2007-01-01");
ResultSet rs = cs.executeQuery();
while (rs.next()) {
//todo:进行相关操作
}
rs.close();
cs.close();
} catch (SQLException e) {
System.out.println("调用存储过程p_test出现异常!");
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
System.out.println("发生不能关闭JDBC链接的异常,请检查!");
e.printStackTrace();
}
}
}
public static void main(String args[]){
new Test().test();
}
}
说明:Java调用其他数据库的存储过程方式和此例一样,存储过程有的不返回值,比如对数据库执行一些update、insert、delete等操作。这个时候调用有所不同。详细请参看J2SDK参考文档。