博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA调用数据库存储过程
阅读量:4647 次
发布时间:2019-06-09

本文共 3062 字,大约阅读时间需要 10 分钟。

下面将举出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);
        }
    }
}

转载于:https://www.cnblogs.com/baiduligang/p/4247274.html

你可能感兴趣的文章
进程和线程区别
查看>>
UE4入门学习2:工程结构分析
查看>>
[Office]PPT 2013如何设置图片为半透明?
查看>>
个人技术博客
查看>>
Windows 2003 Server安全配置完整篇
查看>>
inform表单验证,正则表达式,用户名,身份证,密码,验证码
查看>>
CSS圆角
查看>>
安装 Apache Commons Logging API步骤
查看>>
返回顶部
查看>>
Log4cplus <1> 编译
查看>>
TaskTracker发送Heartbeat以及接受HeartbeatResponse
查看>>
Java集合类--温习笔记
查看>>
Struts2中的bean标签
查看>>
JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码...
查看>>
mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey
查看>>
json-lib 使用教程
查看>>
关于四则运算作业的初步实现
查看>>
Hibernate(六)一对多映射(多对一)
查看>>
进程池-限制同一时间在CPU上运行的进程数
查看>>
HDU - 3001 Travelling
查看>>