Oracle扩充Jdbc链接oracle
2021/12/5 2:16:55
本文主要是介绍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); }
这篇关于Oracle扩充Jdbc链接oracle的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享