天天看点

Java调用Oracle存储过程

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;

            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();

            System.out.println("调用存储过程p_test出现异常!");

        } finally {

                if (conn != null) {

                    conn.close();

                }

            } catch (SQLException e) {

                System.out.println("发生不能关闭JDBC链接的异常,请检查!");

                e.printStackTrace();

        new Test().test();

说明:Java调用其他数据库的存储过程方式和此例一样,存储过程有的不返回值,比如对数据库执行一些update、insert、delete等操作。这个时候调用有所不同。详细请参看J2SDK参考文档。

本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/32713,如需转载请自行联系原作者