Java代码调用存储过程和存储方法
2023-09-11 14:19:21 时间
准备一个oracle 的JDBC jar 包:ojdbc14_11g.jar
首先找到你的 oracle 安装位置,例如:
1.创建一个JDBC数据库连接工具类:
- package com.test.db;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class JDBCUtils {
- private static String driver = "oracle.jdbc.OracleDriver";
- private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
- private static String user = "数据库连接名";
- private static String password = "数据库连接密码";
- //注册数据库驱动
- static{
- try {
- Class.forName(driver);
- } catch (Exception e) {
- throw new ExceptionInInitializerError(e);
- }
- }
- /**
- * 获取数据库连接
- * @return
- */
- public static Connection getConnection(){
- try {
- return DriverManager.getConnection(url,user,password);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return null;
- }
- /**
- * 释放数据库连接资源
- * @param conn
- * @param st
- * @param rs
- */
- public static void release(Connection conn,Statement st,ResultSet rs){
- if (rs!=null) {
- try {
- rs.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }finally{
- rs = null;
- }
- }
- if (st!=null) {
- try {
- st.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }finally{
- st = null;
- }
- }
- if (conn!=null) {
- try {
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }finally{
- conn = null;
- }
- }
- }
- }
package com.test.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCUtils { private static String driver = "oracle.jdbc.OracleDriver"; private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; private static String user = "数据库连接名"; private static String password = "数据库连接密码"; //注册数据库驱动 static{ try { Class.forName(driver); } catch (Exception e) { throw new ExceptionInInitializerError(e); } } /** * 获取数据库连接 * @return */ public static Connection getConnection(){ try { return DriverManager.getConnection(url,user,password); } catch (SQLException e) { e.printStackTrace(); } return null; } /** * 释放数据库连接资源 * @param conn * @param st * @param rs */ public static void release(Connection conn,Statement st,ResultSet rs){ if (rs!=null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ rs = null; } } if (st!=null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ st = null; } } if (conn!=null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ conn = null; } } } }
2.调用 存储过程:
- package com.test.demo;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import org.junit.Test;
- import oracle.jdbc.internal.OracleTypes;
- import oracle.jdbc.oracore.OracleType;
- import com.hwb.db.JDBCUtils;
- /**
- * 调用存储过程 一个输入参数,多个 输出参数
- * @author Administrator
- *
- */
- public class ProcedureTest {
- /**
- * create or replace procedure selectUserById(uid in number,
- uName out VARCHAR2,
- uAge out number,
- uSex out char)
- */
- @Test
- public void testProcedure(){
- String sql = "{call selectUserById(?,?,?,?)}";
- Connection conn = null;
- CallableStatement call = null;
- try {
- //得到一个数据库连接
- conn = JDBCUtils.getConnection();
- //通过连接创建出statement
- call = conn.prepareCall(sql);
- //对于in参数,赋值
- call.setInt(1, 2); // (第几个问号,要赋的值)
- //对out参数,声明
- call.registerOutParameter(2, OracleTypes.VARCHAR); //(第几个问号,声明的类型)
- call.registerOutParameter(3, OracleTypes.NUMBER);
- call.registerOutParameter(4, OracleTypes.CHAR);
- //执行调用
- call.execute();
- //取出结果
- String userName = call.getString(2);
- int userAge = call.getInt(3);
- String userSex = call.getString(4);
- System.out.println("用户姓名:"+userName+"\n\t年龄:"+userAge+"\n\t性别:"+userSex);
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- //关闭连接,释放资源
- JDBCUtils.release(conn, call, null);
- }
- }
- }
package com.test.demo; import java.sql.CallableStatement; import java.sql.Connection; import org.junit.Test; import oracle.jdbc.internal.OracleTypes; import oracle.jdbc.oracore.OracleType; import com.hwb.db.JDBCUtils; /** * 调用存储过程 一个输入参数,多个 输出参数 * @author Administrator * */ public class ProcedureTest { /** * create or replace procedure selectUserById(uid in number, uName out VARCHAR2, uAge out number, uSex out char) */ @Test public void testProcedure(){ String sql = "{call selectUserById(?,?,?,?)}"; Connection conn = null; CallableStatement call = null; try { //得到一个数据库连接 conn = JDBCUtils.getConnection(); //通过连接创建出statement call = conn.prepareCall(sql); //对于in参数,赋值 call.setInt(1, 2); // (第几个问号,要赋的值) //对out参数,声明 call.registerOutParameter(2, OracleTypes.VARCHAR); //(第几个问号,声明的类型) call.registerOutParameter(3, OracleTypes.NUMBER); call.registerOutParameter(4, OracleTypes.CHAR); //执行调用 call.execute(); //取出结果 String userName = call.getString(2); int userAge = call.getInt(3); String userSex = call.getString(4); System.out.println("用户姓名:"+userName+"\n\t年龄:"+userAge+"\n\t性别:"+userSex); } catch (Exception e) { e.printStackTrace(); }finally{ //关闭连接,释放资源 JDBCUtils.release(conn, call, null); } } }
3.调用存储方法:
- package com.test.demo;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import oracle.jdbc.internal.OracleTypes;
- import org.junit.Test;
- import com.hwb.db.JDBCUtils;
- /**
- * 调用存储函数,一个输入参数,一个输出参数
- * @author Administrator
- *
- */
- public class FunctionTest {
- /**
- * create or replace function selectAge(eno in number)
- return number
- */
- @Test
- public void testFunction(){
- //{?= call <procedure-name>[<arg1>,<arg2>...]}
- String sql = "{call selectAge(?)}";
- Connection conn = null;
- CallableStatement call = null;
- try {
- //得到数据库连接
- conn = JDBCUtils.getConnection();
- //通过数据库连接创建statement
- call = conn.prepareCall(sql);
- //对于输出参数,声明
- call.registerOutParameter(1, OracleTypes.NUMBER);
- //对于输入参数,赋值
- call.setInt(2, 3);
- //执行调用
- call.execute();
- //获取返回的结果
- int age = call.getInt(1);
- System.out.println("该用户年龄:"+age);
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- JDBCUtils.release(conn, call, null);
- }
- }
- }
package com.test.demo; import java.sql.CallableStatement; import java.sql.Connection; import oracle.jdbc.internal.OracleTypes; import org.junit.Test; import com.hwb.db.JDBCUtils; /** * 调用存储函数,一个输入参数,一个输出参数 * @author Administrator * */ public class FunctionTest { /** * create or replace function selectAge(eno in number) return number */ @Test public void testFunction(){ //{?= call <procedure-name>[<arg1>,<arg2>...]} String sql = "{call selectAge(?)}"; Connection conn = null; CallableStatement call = null; try { //得到数据库连接 conn = JDBCUtils.getConnection(); //通过数据库连接创建statement call = conn.prepareCall(sql); //对于输出参数,声明 call.registerOutParameter(1, OracleTypes.NUMBER); //对于输入参数,赋值 call.setInt(2, 3); //执行调用 call.execute(); //获取返回的结果 int age = call.getInt(1); System.out.println("该用户年龄:"+age); } catch (Exception e) { e.printStackTrace(); }finally{ JDBCUtils.release(conn, call, null); } } }
4.调用存储过程,一个输入参数,返回一个查询结果集合
- package com.hwb.demo;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import org.junit.Test;
- import oracle.jdbc.internal.OracleCallableStatement;
- import oracle.jdbc.internal.OracleTypes;
- import com.hwb.db.JDBCUtils;
- /**
- * 存储过程 一个输入参数,返回一个查询结果集合
- * @author Administrator
- *
- */
- public class CursorTest {
- /**
- * create or replace package Mypackage as
- procedure queryUserList(uid in number,userList out usercursor);
- end mypackage;
- */
- @Test
- public void testCursor(){
- String sql = "{call Mypackage.queryUserList(?,?) }";
- Connection conn = null;
- CallableStatement call = null;
- ResultSet rs = null;
- try {
- //得到数据库连接
- conn = JDBCUtils.getConnection();
- //通过数据库连接创建statement
- call = conn.prepareCall(sql);
- //对于输入参数,赋值
- call.setInt(1, 1);
- //对于输出参数,声明
- call.registerOutParameter(2, OracleTypes.CURSOR);
- //执行调用
- call.execute();
- //将CallableStatement 强转成 OracleCallableStatement 用来获取光标类型Cursor,并得到结果ResultSet
- rs = ((OracleCallableStatement)call).getCursor(2);
- //遍历 ResultSet
- while (rs.next()) {
- //根据类型和列名取值
- int id = rs.getInt("user_id"); //括号内为 列名
- String user_name = rs.getString("user_name");
- int age = rs.getInt("user_age");
- String sex = rs.getString("user_sex");
- System.out.println("查询到的用户信息:\n\tid:"+id+"\n\t姓名:"+user_name
- +"\n\t年龄:"+age+"\n\t性别:"+sex);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- JDBCUtils.release(conn, call, rs);
- }
- }
- }
package com.hwb.demo; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import org.junit.Test; import oracle.jdbc.internal.OracleCallableStatement; import oracle.jdbc.internal.OracleTypes; import com.hwb.db.JDBCUtils; /** * 存储过程 一个输入参数,返回一个查询结果集合 * @author Administrator * */ public class CursorTest { /** * create or replace package Mypackage as procedure queryUserList(uid in number,userList out usercursor); end mypackage; */ @Test public void testCursor(){ String sql = "{call Mypackage.queryUserList(?,?) }"; Connection conn = null; CallableStatement call = null; ResultSet rs = null; try { //得到数据库连接 conn = JDBCUtils.getConnection(); //通过数据库连接创建statement call = conn.prepareCall(sql); //对于输入参数,赋值 call.setInt(1, 1); //对于输出参数,声明 call.registerOutParameter(2, OracleTypes.CURSOR); //执行调用 call.execute(); //将CallableStatement 强转成 OracleCallableStatement 用来获取光标类型Cursor,并得到结果ResultSet rs = ((OracleCallableStatement)call).getCursor(2); //遍历 ResultSet while (rs.next()) { //根据类型和列名取值 int id = rs.getInt("user_id"); //括号内为 列名 String user_name = rs.getString("user_name"); int age = rs.getInt("user_age"); String sex = rs.getString("user_sex"); System.out.println("查询到的用户信息:\n\tid:"+id+"\n\t姓名:"+user_name +"\n\t年龄:"+age+"\n\t性别:"+sex); } } catch (Exception e) { e.printStackTrace(); }finally{ JDBCUtils.release(conn, call, rs); } } }
相关文章
- 从Java视角理解系统结构(二)CPU缓存
- java基础知识回顾之---java String final类普通方法的应用之字符串数组排序
- Java面向对象基础--类的设计及分析问题的方法---用户登录例子
- java中部的分页实现(二)
- Java实现 蓝桥杯 算法训练 My Bad(暴力)
- Java实现 LeetCode 710 黑名单中的随机数(黑白名单)
- Java实现 LeetCode 643 子数组最大平均数 I(滑动窗口)
- Java实现 蓝桥杯 算法提高 字符串压缩
- Java实现斐波那契数列的多种方法
- Java实现 蓝桥杯 算法训练 删除数组零元素
- Java中Queue和BlockingQueue的区别
- 零基础学java-3,第一个helloworld程序
- 【JAVA】Java 异常中e的getMessage()和toString()方法的异同
- Java - Eclipse的使用方法和技巧
- Java的IO、NIO和Okio
- java之类加载机制
- Java多线程之Callable接口的实现
- 微信java开发之实现微信主动推送消息
- java.lang.OutOfMemoryError: Java heap space 解决方法
- 【JAVA】Java 异常中e的getMessage()和toString()方法的异同
- 【JAVA】java中的length和length()
- Java Collection类型的forEach方法
- Atitit java播放器调音速率快慢的实现 目录 1.1. 原理 本质上是改变采样率即可1 2. 使用Java增加/降低AudioInputStream的音频播放速度(Increase/dec
- Simple Logging Facade for Java (SLF4J)作用(java日志框架)
- Java中String类中compareTo( )方法
- 【Java用法】java 8两个List集合取交集、并集、差集、去重并集
- java list 类型删除其中的某些元素的正确方法
- java中集合类中Collection接口中的Set接口的常用方法熟悉
- Java如何创建多线程服务器?
- Java中valueOf()方法
- JAVA操作Excel表格:方法一:jxl的使用②:Excel实战之JXL解析读取excel文件
- 【java】Java IO体系总览
- 【Java数组】一维数组、二维数组、冒泡排序、直接选择排序、反转排序
- 关于java中线程yield()方法问题