【学习】java下实现调用oracle的存储过程和函数
在oracle下创建一个test的账户,然后按一下步骤执行:
1.创建表:STOCK_PRICES
--创建表格CREATETABLE STOCK_PRICES( RIC VARCHAR(6) PRIMARYKEY, PRICE NUMBER(7,2), UPDATED DATE );
2.插入测试数据:
--插入数据INSERTINTO stock_prices values('1111',1.0,SYSDATE);INSERTINTO stock_prices values('1112',2.0,SYSDATE);INSERTINTO stock_prices values('1113',3.0,SYSDATE);INSERTINTO stock_prices values('1114',4.0,SYSDATE);
3.建立一个返回游标: PKG_PUB_UTILS
--建立一个返回游标CREATEORREPLACE PACKAGE PKG_PUB_UTILS IS--动态游标 TYPE REFCURSOR IS REF CURSOR;END PKG_PUB_UTILS;
4.创建和存储过程:P_GET_PRICE

--创建存储过程CREATEORREPLACEPROCEDURE P_GET_PRICE( AN_O_RET_CODE OUT NUMBER, AC_O_RET_MSG OUT VARCHAR2, CUR_RET OUT PKG_PUB_UTILS.REFCURSOR, AN_I_PRICE INNUMBER) ISBEGIN AN_O_RET_CODE :=0; AC_O_RET_MSG :='操作成功'; OPEN CUR_RET FORSELECT*FROM STOCK_PRICES WHERE PRICE< span>AN_I_PRICE;EXCEPTION WHEN OTHERS THEN AN_O_RET_CODE :=-1; AC_O_RET_MSG :='错误代码:'|| SQLCODE || CHR(13) ||'错误信息:'|| SQLERRM;END P_GET_PRICE;

</span>
5.创建函数:

--创建函数:F_GET_PRICECREATEORREPLACEFUNCTION F_GET_PRICE(v_price INNUMBER) RETURN PKG_PUB_UTILS.REFCURSORAS stock_cursor PKG_PUB_UTILS.REFCURSOR;BEGINOPEN stock_cursor FORSELECT*FROM stock_prices WHERE price < span> v_price; RETURN stock_cursor;END;

</span>
6.JAVA调用存储过程返回结果集
代码示例:JDBCoracle10G_INVOKEPROCEDURE.java

import java.sql.*;import oracle.jdbc.OracleCallableStatement;import oracle.jdbc.OracleTypes;/* 本例是通过调用oracle的存储过程来返回结果集: * oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip */publicclass JDBCoracle10G_INVOKEPROCEDURE { Connection conn = null; Statement statement = null; ResultSet rs = null; CallableStatement stmt = null; String driver; String url; String user; String pwd; String sql; String in_price; public JDBCoracle10G_INVOKEPROCEDURE() { driver = "oracle.jdbc.driver.OracleDriver"; url = "jdbc:oracle:thin:@localhost:1521:ORCL"; // oracle 用户 user = "test"; // oracle 密码 pwd = "test"; init(); // mysid:必须为要连接机器的sid名称,否则会包以下错: // java.sql.SQLException: Io 异常: Connection // refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4)))) // 参考连接方式: // Class.forName( "oracle.jdbc.driver.OracleDriver" ); // cn = DriverManager.getConnection( // "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd ); } publicvoid init() { System.out.println("oracle jdbc test"); try { Class.forName(driver); System.out.println("driver is ok"); conn = DriverManager.getConnection(url, user, pwd); System.out.println("conection is ok"); statement = conn.createStatement(); // conn.setAutoCommit(false); // 输入参数 in_price = "3.0"; // 调用函数 stmt = conn.prepareCall("call P_GET_PRICE(?,?,?,?)"); stmt.registerOutParameter(1, java.sql.Types.FLOAT); stmt.registerOutParameter(2, java.sql.Types.CHAR); stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR); stmt.setString(4, in_price); stmt.executeUpdate(); int retCode = stmt.getInt(1); String retMsg = stmt.getString(2); if (retCode == -1) { // 如果出错时,返回错误信息 System.out.println("报错!"); } else { // 取的结果集的方式一: rs = ((OracleCallableStatement) stmt).getCursor(3); // 取的结果集的方式二: // rs = (ResultSet) stmt.getObject(3); String ric; String price; String updated; // 对结果进行输出while (rs.next()) { ric = rs.getString(1); price = rs.getString(2); updated = rs.getString(3); System.out.println("ric:" + ric + ";-- price:" + price + "; --" + updated + "; "); } } } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("close "); } } publicstaticvoid main(String args[])// 自己替换[] { new JDBCoracle10G_INVOKEPROCEDURE(); }}

7.开发JAVA调用函数返回结果集
代码示例:JDBCoracle10G_INVOKEFUNCTION.java

import java.sql.*;import oracle.jdbc.OracleCallableStatement;import oracle.jdbc.OracleTypes;/* /* 本例是通过调用oracle的函数来返回结果集: * oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip */publicclass JDBCoracle10G_INVOKEFUNCTION { Connection conn = null; Statement statement = null; ResultSet rs = null; CallableStatement stmt = null; String driver; String url; String user; String pwd; String sql; String in_price; public JDBCoracle10G_INVOKEFUNCTION() { driver = "oracle.jdbc.driver.OracleDriver"; url = "jdbc:oracle:thin:@localhost:1521:ORCL"; // oracle 用户 user = "test"; // oracle 密码 pwd = "test"; init(); // mysid:必须为要连接机器的sid名称,否则会包以下错: // java.sql.SQLException: Io 异常: Connection // refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4)))) // 参考连接方式: // Class.forName( "oracle.jdbc.driver.OracleDriver" ); // cn = DriverManager.getConnection( // "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd ); } publicvoid init() { System.out.println("oracle jdbc test"); try { Class.forName(driver); System.out.println("driver is ok"); conn = DriverManager.getConnection(url, user, pwd); System.out.println("conection is ok"); statement = conn.createStatement(); // conn.setAutoCommit(false); // 输入参数 in_price = "5.0"; // 调用函数 stmt = conn.prepareCall("{? = call F_GET_PRICE(?)}"); // stmt.registerOutParameter(1, java.sql.Types.FLOAT); // stmt.registerOutParameter(2, java.sql.Types.CHAR); stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); stmt.setString(2, in_price); stmt.executeUpdate(); // 取的结果集的方式一: rs = ((OracleCallableStatement) stmt).getCursor(1); // 取的结果集的方式二: // rs = (ResultSet) stmt.getObject(1); String ric; String price; String updated; while (rs.next()) { ric = rs.getString(1); price = rs.getString(2); updated = rs.getString(3); System.out.println("ric:" + ric + ";-- price:" + price + "; --" + updated + "; "); } } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("close "); } } publicstaticvoid main(String args[])// 自己替换[] { new JDBCoracle10G_INVOKEFUNCTION(); }}

【学习】java下实现调用oracle的存储过程和函数的更多相关文章
- java下实现调用oracle的存储过程和函数
在Oracle下创建一个test的账户,然后 1.创建表:STOCK_PRICES --创建表格 CREATE TABLE STOCK_PRICES( RIC VARCHAR() PRIMARY KE ...
- Java代码调用Oracle的存储过程,存储函数和包
Java代码调用存储过程和存储函数要使用CallableStatement接口 查看API文档: 上代码: java代码调用如下的存储过程和函数: 查询某个员工的姓名 月薪 职位 create or ...
- C#调用Oracle的存储过程时,连接字符串需要配置PLSQLRSet=1
C#调用Oracle的存储过程时, 如果有个SYS_REFCURSOR的Output参数存储时, web.config文件中的连接字符串需要配置PLSQLRSet=1, 否则可能会报这个错:参数个数或 ...
- firedac调用ORACLE的存储过程
firedac调用ORACLE的存储过程 EMB官方原文地址:http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_Oracle_with_F ...
- Java 如何调用 oracle 的存储过程
通过命令行创建存储过程 create or replace procedure emp_sal(eno emp.empno%type,esal out emp.sal%type) as begin s ...
- Mybatis下配置调用Oracle自定义函数返回的游标结果集
在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...
- Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...
- Hibernate调用Oracle的存储过程
众所周知,当过多的使用存储过程,触发器等 数据库方言相关的应用时,应用程序的移植性会变差,特别是在Hibernate中使用这些,简直是讽刺,但是当今中国又有哪家公司做项目会关心应用程序的移植性呢? 现 ...
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践[转]
Cocos2d-x下Lua调用C++这事之所以看起来这么复杂.网上所有的文档都没讲清楚,是因为存在5个层面的知识点: 1.在纯C环境下,把C函数注册进Lua环境,理解Lua和C之间可以互相调用的本质 ...
随机推荐
- 今天,你Try-Catch了吗?
引言: 高级语言中的异常处理很好用,对于有可能出错的代码我们用Try-Catch包起来,就能保证系统健壮的运行了,但是你的Try-Catch用对了吗? 今天code review的时候,老板给我提了个 ...
- layui表格的新增和编辑功能前端代码
html页面的代码(注意:引入layui相关的css): <div class="layui-form-item"> <label class="lay ...
- P2216 [HAOI2007]理想的正方形(二维RMQ)
题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至 ...
- 2015 Objective-C 新特性
Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时,也有很多像我一样工作上依然 ...
- CorelDRAW教程:怎样绘制制作箭头流程图?
箭头流程图主要由矢量图和连接符组成,通过图形之间的顺序阐述的一个过程,应用也是非常广泛,有些软件中会自带流程图,对于CDR这款矢量绘图软件来说,手动制作流程图是简单且高效的.首先CorelDRAW中就 ...
- Windows10 下安装 Mongodb
一.先登录Mongodb官网https://www.mongodb.com/download-center#community 下载 安装包.32.64位的都行.
- Python——wordcloud
import jiebafrom wordcloud import WordCloud,STOPWORDSimport matplotlib.pyplot as pltfrom scipy.misc ...
- Ubuntu_18.04安装网易云音乐
首先到网易云音乐官网下载网易云音乐,ubuntu版的,安装. 这时候的图标打不开,缺少libcanberra sudo apt install libcanberra-gtk-module 安装完了配 ...
- MySQL的读写分离的几种选择
MySQL的读写分离的几种选择 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 原址如下: http://heylinux.com/archives/1004. ...
- multiple definition of
总结了解决multiple definition of的方法: 问题原因: 当多个文件包含同一个头文件时,并且你的.H里面没有加上条件编译#ifndef TEST_H#define TEST_H ...