java下实现调用oracle的存储过程和函数
来源:互联网 发布:音乐cms 编辑:程序博客网 时间:2024/05/20 06:05
在oracle下创建一个test的账户,然后
1.创建表:STOCK_PRICES
--创建表格CREATE TABLE STOCK_PRICES( RIC VARCHAR(6) PRIMARY KEY, PRICE NUMBER(7,2), UPDATED DATE );
2.插入测试数据:
--插入数据INSERT INTO stock_prices values('1111',1.0,SYSDATE);INSERT INTO stock_prices values('1112',2.0,SYSDATE);INSERT INTO stock_prices values('1113',3.0,SYSDATE);INSERT INTO stock_prices values('1114',4.0,SYSDATE);
3.建立一个返回游标:
PKG_PUB_UTILS
--建立一个返回游标CREATE OR REPLACE PACKAGE PKG_PUB_UTILS IS --动态游标 TYPE REFCURSOR IS REF CURSOR;END PKG_PUB_UTILS;
4.创建和存储过程:P_GET_PRICE
--创建存储过程CREATE OR REPLACE PROCEDURE 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 IN NUMBER) ISBEGIN AN_O_RET_CODE := 0; AC_O_RET_MSG := '操作成功'; OPEN CUR_RET FOR SELECT * FROM STOCK_PRICES WHERE PRICE<AN_I_PRICE;EXCEPTION WHEN OTHERS THEN AN_O_RET_CODE := -1; AC_O_RET_MSG := '错误代码:' || SQLCODE || CHR(13) || '错误信息:' || SQLERRM;END P_GET_PRICE;
5.创建函数:
--创建函数:F_GET_PRICECREATE OR REPLACE FUNCTION F_GET_PRICE(v_price IN NUMBER) RETURN PKG_PUB_UTILS.REFCURSORAS stock_cursor PKG_PUB_UTILS.REFCURSOR;BEGIN OPEN stock_cursor FOR SELECT * FROM stock_prices WHERE price < v_price; RETURN stock_cursor;END;
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 */public class 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 );}public void 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 ");}}public static void 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 */public class 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 );}public void 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 ");}}public static void main(String args[])// 自己替换[]{new JDBCoracle10G_INVOKEFUNCTION();}}
0 0
- java下实现调用oracle的存储过程和函数
- java下实现调用oracle的存储过程和函数
- java下实现调用oracle的存储过程和函数
- java下实现调用oracle的存储过程和函数
- java下实现调用oracle的存储过程和函数
- oracle存储过程和函数的调用
- Java调用Oracle数据库存储过程和存储函数
- oracle--在java中调用存储过程和存储函数
- Oracle存储过程、存储函数以及Java程序调用存储过程和存储函数
- Java调用Oracle的存储过程、存储函数
- Java中使用ibatis调用Oracle存储过程和函数
- Java调用Oracle存储过程和函数(三)
- java调用oracle函数存储过程
- oracle 存储过程和函数的调用方法
- oracle 存储过程和函数的调用方法
- JAVA调用Oracle存储过程的实现方法
- oracle存储过程实现JAVA调用的分页
- Jorm使用Session实现存储过程和函数的调用
- eclipse导入framework
- REST协议
- VS无法调试,无法进入断点,断点无效
- CSS中margin和padding的区别(1)
- IOS 日期判断 今天、昨天、以前
- java下实现调用oracle的存储过程和函数
- 文思海辉入选Forrester Wave(TM)跻身全球顶级产品开发服务供应商
- Web Service的理解
- 一个老程序员的教诲(2)
- RTTI
- 教你进一步提升seo的技能
- 使用perl来判断文件是否存在
- 沙盒中图片的存储
- 微信开发一年,累觉不爱