【学习】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之间可以互相调用的本质 ...
随机推荐
- 开发辅助 | 前端开发工程师对 UI设计、交互设计的认知
1.UI 用户界面 UI:User Interfase 用户界面 UID:User Interfase Designer 用户界面设计师,多指移动 app 的界面设计: 2.一个合格的 UI 设计师, ...
- PHP 导出excel 数据量大时
public function ceshiexcel1(){ set_time_limit(0); $filename = '病毒日志'; header('Content-Type: applicat ...
- SQL学习——基础语句(4)
前面感觉真的好乱,想哪,写哪.这里慢慢整理…… SQL Having 语句 还是前面的那两个表: grade表: student表: 我们需要查找这里的s_id下的gradeValue的和,这就要分组 ...
- 在APP开发设计中,为什么APP开发公司要慎用左右横滑设计?
移动端屏幕越来越大,但用户对内容量的要求也水涨船高.如何在有限的屏幕内透出更多的内容,是设计师们研究的重点. 常用的内容拓展设计有:Y 方向 List 滑动.Z 方向 3D Touch .入口式内容折 ...
- Hessian 接口使用示例总结
一.使用hessian接口准备 首先,hessian接口的使用,必须要准备hessian接口的jar包,本文使用的jar包如下:hessian-4.0.7.jar; Hessian接口的使用一般是在两 ...
- Eclipse中执行Ant脚本出现Could not find the main class的问题及解
试过了:https://blog.csdn.net/bookroader/article/details/2300337 但是不管用,偶然看到这篇没有直接关系的 https://blog.csdn.n ...
- WiFi无线连接过程中有哪几个主要步骤?
WiFi无线连接过程中有哪几个主要步骤?[1]在使用WIFI功能时,经常性的操作是打开手机上的WiFi设备,搜索到心目中的热点,输入密码,联网成功,成功上网.这个看似简单的过程,背后却是隐藏着大量的无 ...
- CGI与ISAPI的区别(转)
一 CGI原理及其性能 1) CGI概念CGI即通用网关接口(Common Gateway Interface),它是一段程序,运行在服务器上,提供同客户端HTML页面的交互,通俗的讲CGI就象是一座 ...
- Jquery Map遍历
var map = { 地名: ["北京","天津","上海"], 民族: ["汉族","藏族",& ...
- if判断语句
6)if判断语句 if ... then else end if; if ... then elsif ... then elsif ... then else ...