zoukankan      html  css  js  c++  java
  • JAVA调用数据库存储过程




    下面将举出JAVA对ORACLE数据库存储过程的调用


            


    ConnUtils连接工具类:用来获取连接、释放资源


    复制代码
    package com.ljq.test;


    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;


    /**
     * 连接工具类
     * 
     * ConnUtils类声明为final类说明此类不可以被继承
     * 
     * @author jiqinlin
     * 
     */
    public final class ConnUtils {
        private static String url = "jdbc:oracle:thin:@localhost:1521:orcl";
        private static String user = "test";
        private static String password = "test";


        /**
         * 说明要访问此类只能通过static或单例模式
         */
        private ConnUtils() {
        }


        // 注册驱动 (只做一次)
        static {
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
            } catch (ClassNotFoundException e) {
                throw new ExceptionInInitializerError(e);
            }
        }


        /**
         * 获取Connection对象
         * 
         * @return
         * @throws SQLException
         */
        public static Connection getConnection() throws SQLException {
            return DriverManager.getConnection(url, user, password);
        }


        /**
         * 释放资源
         * 
         * @param rs
         * @param st
         * @param conn
         */
        public static void free(ResultSet rs, Statement st, Connection conn) {
            try {
                if (rs != null)
                    rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (st != null)
                        st.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    if (conn != null)
                        try {
                            conn.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                }
            }
        }
    }
    复制代码
                


    创建带出参存储过程代码:


    复制代码
    --带出参存储过程
    CREATE OR REPLACE PROCEDURE stu_proc(v_name OUT VARCHAR2) AS
    BEGIN 
      SELECT o.sname INTO v_name FROM student o where o.id = 2;
    END;
    复制代码
            


    使用java调用带出参的存储过程


    复制代码
    package com.ljq.test;


    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.Types;


    public class ProceTest {


        public static void main(String[] args) throws Exception {
            Connection conn = null;
            CallableStatement statement = null;
            String sql = "{call stu_proc(?)}";
            try {
                conn = ConnUtils.getConnection();
                statement = conn.prepareCall(sql);
                statement.registerOutParameter(1, Types.VARCHAR);
                statement.executeUpdate();
                //输出:lisi
                String sname = statement.getString(1);
                System.out.println(sname);
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                ConnUtils.free(null, statement, conn);
            }
        }


    }
    复制代码
                


    创建带出入参存储过程代码


    复制代码
    --带出入参存储过程
    CREATE OR REPLACE PROCEDURE stu_proc(v_id IN NUMBER, v_name OUT VARCHAR2) AS
    BEGIN 
      SELECT o.sname INTO v_name FROM student o where o.id = v_id;
    END;
    复制代码
              


    使用JAVA调用带出入参存储过程


    复制代码
    package com.ljq.test;


    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.Types;


    public class ProceTest {


        public static void main(String[] args) throws Exception {
            Connection conn = null;
            CallableStatement statement = null;
            String sql = "{call stu_proc(?, ?)}";
            try {
                conn = ConnUtils.getConnection();
                statement = conn.prepareCall(sql);
                statement.setInt(1, 1);
                statement.registerOutParameter(2, Types.VARCHAR);
                statement.executeUpdate();
                //输出:zhangsan
                String sname = statement.getString(2);
                System.out.println(sname);
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                ConnUtils.free(null, statement, conn);
            }
        }


    }
  • 相关阅读:
    sqlite数据库的char,varchar,text,nchar,nvarchar,ntext的区别(转)
    DELPHI XE5-8 弹出列表框供选择
    delphi弹出选择对话框选择目录|SelectDirectory 函数(转)
    php 与java安卓客户端的查询交互
    sql查询语句的拼接小技巧(高手勿喷)
    高德地图应用——与云图后台交互
    Inno Setup 通用脚本及简要说明( 一般情况够用了)
    不用SQL给打印记录编号
    DELPHI XE5/6/7 android 无线真机调试
    超级简单的例子说明JAVA PACKET CLASS 和变量之间的关系
  • 原文地址:https://www.cnblogs.com/baiduligang/p/4247274.html
Copyright © 2011-2022 走看看