当前位置: 首页 > news >正文

java调用存储过程 oracle_Java调用Oracle存储过程详解

Java调用Oracle存储过程详解

步骤:

1、编写Oracle存储过程

2、编写数据库获取连接工具类

3、编写简单应用调用存储过程

实现:

1、Oracle存储过程:

/*测试表*/

create table test(

id varchar2(32),

name varchar2(32)

);

/*存储过程 插入数据*/

CREATE OR REPLACE PROCEDURE insert_procedure(

PARA1 IN VARCHAR2,

PARA2 IN VARCHAR2

) AS

BEGIN

INSERT INTO test (id, name) VALUES (PARA1, PARA2);

END insert_procedure;

/*存储过程 返回结果集*/

CREATE OR REPLACE PROCEDURE select_procedure(

para_id IN VARCHAR2,

name OUT sys_refcursor /* 这个sys_refcursor类型在SYS.STANDARD包中 */

) AS

BEGIN

OPEN name FOR

SELECT * FROM test WHERE id = para_id;

END;

2、JDBC工具类

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class DBUtil {

public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";

public static final String URL = "jdbc:oracle:thin:@localhost:1521/orcl";

public static final String USERNAME = "pfm";

public static final String PASSWORD = "pfm";

/**

* 通过静态代码块 注册数据库驱动

*/

static {

try {

Class.forName(DRIVER);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

/**

* 获得Connection

*

* @return

*/

public static Connection getConnection() {

Connection conn = null;

try {

conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);

} catch (SQLException e) {

e.printStackTrace();

}

return conn;

}

/**

* 获得Statement

*

* @return

*/

public static Statement getStatement() {

Statement st = null;

try {

st = getConnection().createStatement();

} catch (SQLException e) {

e.printStackTrace();

}

return st;

}

/**

* 关闭ResultSet

*

* @param rs

*/

public static void closeResultSet(ResultSet rs) {

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

/**

* 关闭Statement

*

* @param st

*/

public static void closeStatement(Statement st) {

if (st != null) {

try {

st.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

/**

* 关闭Connection

*

* @param conn

*/

public static void closeConnection(Connection conn) {

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

/**

* 关闭全部

*

* @param rs

* @param sta

* @param conn

*/

public static void closeAll(ResultSet rs, Statement sta, Connection conn) {

closeResultSet(rs);

closeStatement(sta);

closeConnection(conn);

}

}

3、调用存储过程:

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import oracle.jdbc.driver.OracleTypes;

/**

* 测试调用存储过程

*

*/

public class StoredTest {

public static void main(String[] args) {

insert_call();

//select_call();

}

/**

* 执行存储过程 插入数据

*/

public static void insert_call() {

Connection conn = DBUtil.getConnection();

PreparedStatement pst = null;

CallableStatement proc = null; // 创建执行存储过程的对象

try {

proc = conn.prepareCall("{ call insert_procedure(?,?) }");

proc.setString(1, "1"); // 设置第一个输入参数

proc.setString(2, "hello call"); // 设置第一个输入参数

proc.execute();// 执行

} catch (SQLException e) {

e.printStackTrace();

} finally {

try {

// 关闭IO流

proc.close();

DBUtil.closeAll(null, pst, conn);

} catch (Exception e) {

e.printStackTrace();

}

}

}

/**

* 执行存储过程 查询数据

*/

public static void select_call() {

Connection conn = DBUtil.getConnection();

CallableStatement stmt;

try {

stmt = conn.prepareCall("{ call select_procedure(?, ?) }"); // 用此调用方法不能实现多行语法

stmt.setString(1, "1");

stmt.registerOutParameter(2, OracleTypes.CURSOR);

stmt.execute();

ResultSet rs = (ResultSet) stmt.getObject(2);

while (rs.next()) {

System.out.println(rs.getString("name"));

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

DBUtil.closeConnection(conn);

}

}

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章:

  • 章立民老师北京ASP.NET Ajax技术研讨会获广泛好评
  • java 1.7的新特性_JDK1.7新特性
  • java c3p0 jar包_c3p0-0.9.1.2.jar下载
  • USB枚举详细过程剖析
  • java 死循环排查_java2如何排查线上死循环
  • Java SE 6 中实现 Cookie 功能
  • redis入门java_java面试基础知识-Redis基础
  • java 库 方法内部_java 构造函数内部的多态方法 完全剖析
  • 中国将承接世界文明
  • 浅谈持续集成CC
  • java架构和iis_防止IIS文件被下载方法
  • java数字循环求最小值_从键盘上接收一些数字,比较输出中的最大值和最小值,输入0结束循环。java写出来...
  • 持续集成工具CC介绍
  • java随机数_Java随机数Random()
  • Delphi调用WMI读取USB设备的PID和VID
  • __proto__ 和 prototype的关系
  • 0基础学习移动端适配
  • Android单元测试 - 几个重要问题
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Centos6.8 使用rpm安装mysql5.7
  • codis proxy处理流程
  • ECS应用管理最佳实践
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Flex布局到底解决了什么问题
  • IDEA 插件开发入门教程
  • JAVA_NIO系列——Channel和Buffer详解
  • Python利用正则抓取网页内容保存到本地
  • React Native移动开发实战-3-实现页面间的数据传递
  • Terraform入门 - 1. 安装Terraform
  • Xmanager 远程桌面 CentOS 7
  • 测试如何在敏捷团队中工作?
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 给Prometheus造假数据的方法
  • 基于HAProxy的高性能缓存服务器nuster
  • 思考 CSS 架构
  • 优秀架构师必须掌握的架构思维
  • linux 淘宝开源监控工具tsar
  • 带你开发类似Pokemon Go的AR游戏
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #AngularJS#$sce.trustAsResourceUrl
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • ${ }的特别功能
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (33)STM32——485实验笔记
  • (附源码)php新闻发布平台 毕业设计 141646
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (实战篇)如何缓存数据
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)ABI是什么
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)jdk与jre的区别
  • (转)我也是一只IT小小鸟
  • (转)详解PHP处理密码的几种方式