【学习】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之间可以互相调用的本质 ...
随机推荐
- Centos7 minimal 系列之rabbitmq安装(八)
一.安装Erlang 由于RabbitMQ依赖Erlang, 所以需要先安装Erlang. 这种方法网站访问不了 wget https://packages.erlang-solutions.com/ ...
- 有关DevExpress 安装后vs工具箱不显示图标的错误
在https://www.devexpress.com/Support/Center/Question/Details/T214296/missing-icons-from-toolbox找到解决方法 ...
- 自己写的PHP的mql类
用类封装的一个数据库的操作,不仅安全,而且会省去很多代码. header('Content-type:text/html;charset="utf-8"'); class mysq ...
- Visual Studio icon 含义
图片摘自:https://msdn.microsoft.com/en-us/library/y47ychfe.aspx
- ZBrush软件特性之Color调控板
ZBrush®中的Color调色板显示当前颜色并提供数值的方法选择颜色,而且选择辅助色,使用描绘工具可以产生混合的色彩效果. ZBrush 4R8下载:http://wm.makeding.com/i ...
- IPv6地址分配
- 路飞学城Python-Day19(practise)
# 特性1.继承:2.多态:3.封装 # 1.继承的用处:通过继承就可以解决类与类之间的代码冗余关系 # 2.多态的用处:1.增加了程序的灵活性,以不变应万变,使用者都是同一种形式去调用(func(a ...
- JAVA导出csv出现0.00E+00
导出csv出现 0.00E+00的问题,打印其值为0E-8:这是因为数据表中无对应数据(decimal),查询结果则为 0e-8. 出现的字段是多个字段相加产生的和,所以这里调用了一个相加的方法.在相 ...
- 【Latex常见问题总结】
1. 非数学符号如max/min将下标放到正下方,这个问题折腾了很久, 下标不在正下方会带俩两个问题,一是有时候不够美观,二是会使得数学公式过长越界,需要换行. 解决方案:将符号转换为数学符号, \m ...
- 父类指针指向子类内存,为什么当父类的成员函数不加virtual时,访问的还是父类的成员函数,而不是子类同名的成员函数
我认为是这样,类的成员函数都在代码区,不同的类的成员函数在代码区有自己的类名称空间限制,类的虚函数在虚函数表中,程序执行的时候,是先在虚函数表中找该成员函数,如果没有找到,就去该类在代码区的成员函数中 ...