Oracle扩充Jdbc链接oracle

jdbc连接oracle

获取jar

oracle的驱动jar在mvn中央仓库 是没有

在oracle的软件中就有此jar

E:\Java\software\oracle\product\11.2.0\dbhome_1\jdbc\lib

创建项目 导入jar

创建连接

thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracle客户端,
只要求classpath中包含jdbc驱动的jar包就行。
thin就是纯粹用Java写的ORACLE数据库访问接口。适用于单机连接

oci是一种胖客户端的连接方式,即采用这种连接方式需要安装oracle客户端。
oci是Oracle Call Interface的首字母缩写,是ORACLE公司提供了访问接口,
就是使用Java来调用本机的Oracle客户端,然后再访问数据库,优点是速度快,
但是需要安装和配置数据库。适用于集群连接
package wen.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Test_Jdbc {
    public static void main(String[] args) throws Exception {
        // 1 导入jar
        // 2 注册驱动
        Class.forName("oracle.jdbc.driver.OracleDriver");
        // 3 准备参数
        String url = "jdbc:oracle:thin:@localhost:1521:orcl", user = "wen", pwd = "123";
        // 4 获取连接
        Connection con = DriverManager.getConnection(url, user, pwd);
        // 5 准备sql模板
        String sql = "select * from student where sex=?";
        // 6 获取预编译对象
        PreparedStatement pre = con.prepareStatement(sql);
        // 7 给占位符赋值
        pre.setString(1, "女");
        // 8 执行execute方法 获取结果集
        ResultSet set = pre.executeQuery();
        // 9 处理结果集
        while (set.next()) {
            int sid = set.getInt("sid");
            String sname = set.getString("sname");
            String sex = set.getString("sex");
            int sage = set.getInt("sage");
            float score = set.getFloat("score");
            System.out.println(sid + ":" + sex + ":" + sname + ":" + sage + ":" + score);
        }
        // 10 关闭连接释放资源
        set.close();
        pre.close();
        con.close();
    }
}

通过jdbc调用存储过程

格式

调用存储过程使用是preparedstatement的子接口CallableStatement
格式: 
    {?= call <procedure-name>[(<arg1>,<arg2>, ...)]}  调用function
    {call <procedure-name>[(<arg1>,<arg2>, ...)]}     调用procedure

创建连接和关闭连接

private static Connection getCon() {
    try {
        // 1 导入jar
        // 2 注册驱动
        Class.forName("oracle.jdbc.driver.OracleDriver");
        // 3 准备参数
        String url = "jdbc:oracle:thin:@localhost:1521:orcl", user = "wen", pwd = "123";
        // 4 获取连接
        Connection con = DriverManager.getConnection(url, user, pwd);
        return con;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

private static void close(Connection con, Statement sta, ResultSet set) {
    try {
        if (set != null)
            set.close();
        if (sta != null)
            sta.close();
        if (con != null)
            con.close();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

创建存储过程

create or replace procedure
   pro_1(a in int,b out int, c in out int)
as
begin
  b:=a+1;
  c:=c+a;
end;

jdbc调用

private static void executeProcedure() throws Exception {
    // 获取连接
    Connection con = getCon();
    // 获取sql模板:{call <procedure-name>[(<arg1>,<arg2>, ...)]}
    CallableStatement call = con.prepareCall("{call pro_1(?,?,?)}");
    // 给第一个参数in模式的参数赋值
    call.setInt(1, 5);
    // 给第二个参数out模式的参数 指定第二个out参数的类型
    call.registerOutParameter(2, Types.INTEGER);
    // 给第三个参数in out模式的参数
    call.setInt(3, 6);
    // 指定为out模式
    call.registerOutParameter(3, Types.INTEGER);
    // 执行存储过程
    boolean b = call.execute();
    // 处理结果集
    int bresult = call.getInt(2);
    int cresult = call.getInt(3);
    System.out.println("b=" + b + "," + bresult + "," + cresult);
    // 关闭连接
    close(con, call, null);
}

通过jdbc调用函数

创建函数

create or replace function
   fun_1(a int,b float)
return float   
as
begin
   return a+b;
end;

调用1

private static void executeFunction1() throws Exception {
    // 获取连接
    Connection con = getCon();
    // 获取sql模板:{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
    CallableStatement call = con.prepareCall("{?=call fun_1(?,?)}");
    // 给占位符赋值
    call.registerOutParameter(1, Types.FLOAT);
    call.setInt(2, 5);
    call.setFloat(3, 6);
    // 执行函数
    boolean b = call.execute();
    // 处理结果集
    float cresult = call.getFloat(1);
    System.out.println("b=" + b + "," + cresult);
    // 关闭连接
    close(con, call, null);
}

调用2

private static void executeFunction2() throws Exception {
    // 获取连接
    Connection con = getCon();
    // 获取sql模板
    PreparedStatement pre = con.prepareStatement("select fun_1(?,?) fn from dual");
    // 给占位符赋值
    pre.setInt(1, 5);
    pre.setFloat(2, 1.1f);
    // 执行execute方法
    ResultSet set = pre.executeQuery();
    // 获取结果集
    if (set.next()) {
        System.out.println("fn=" + set.getFloat("fn"));
    }
    // 关闭连接
    close(con, pre, set);
}
posted @ 2021-12-04 21:54  RenVei  阅读(79)  评论(0编辑  收藏  举报