请教如何将Oracle存储函数转为java 匿名函数方法

比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
如何在Oracle中使用Java存储过程
  其实,这篇短文,我早就应该写了。因为,Java过程今后在各库厂商中越来越流行,功能也越来越强大。这里以为例,介绍一下java存储过程的具体用法。
  一、如何创建java存储过程?
  通常有三种方法来创建java存储过程。
  1. 使用oracle的sql语句来创建:
  e.g. 使用create or replace and compile java source named "" as
  后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。
  SQL& create or replace and compile java source named "javademo1" 2 as 3 import java.sql.*; 4 public class JavaDemo1 5 { 6 public static void main(String[] argv) 7 { 8 System.out.println("hello, java demo1"); 9 } 10 } 11 / Java 已创建。 SQL& show errors java source "javademo1" 没有错误。 SQL& create or replace procedure javademo1 2 as 3 language java name 'JavaDemo1.main(java.lang.String[])'; 4 / 过程已创建。 SQL& set serveroutput on SQL& call javademo1(); 调用完成。 SQL& call dbms_java.set_output(5000); 调用完成。 SQL& call javademo1(); hello, java demo1 调用完成。 SQL& call javademo1(); hello, java demo1 调用完成。
  2. 使用外部class文件来装载创建
  e.g. 这里既然用到了外部文件,必然要将class文件放到oracle Server的某一目录下边。
  public class OracleJavaProc { public static void main(String[] argv) { System.out.println("It's a Java Oracle procedure."); } } SQL& grant create an 授权成功。 SQL& conn scott/tiger@iihero.oracledb 已连接。 SQL& create or replace directory test_dir as 'd:/oracle'; 目录已创建。 SQL& create or replace java class using bfile(test_dir, 'OracleJavaProc.CLASS') 2 / Java 已创建。 SQL& create or replace procedure testjavaproc as language java name 'OracleJavaProc.main(java.lang.String[])'; 2 / 过程已创建。 SQL& call testjavaproc(); 调用完成。 SQL&
PL/SQL 过程已成功完成。 SQL& set serveroutput on size 5000 SQL& call dbms_java.set_output(5000); 调用完成。 SQL&
It's a Java Oracle procedure.
  3. 我推荐的一种方法,直接使用loadjava命令远程装载并创建。
  先创建一个类, e.g.
  import java.sql.*; import oracle.jdbc.*; public class OracleJavaProc { //Add a salgrade to the database. public static void addSalGrade(int grade, int losal, int hisal) { System.out.println("Creating new salgrade for EMPLOYEE..."); try { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); String sql = "INSERT INTO salgrade " + "(GRADE,LOSAL,HISAL) " + "VALUES(?,?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1,grade); pstmt.setInt(2,losal); pstmt.setInt(3,hisal); pstmt.executeUpdate(); pstmt.close(); } catch(SQLException e) { System.err.println("ERROR! Adding Salgrade: " + e.getMessage()); } } }
  使用loadjava命令将其装载到端并编译:
  D:eclipse3.1workspacedbtest&loadjava -u scott/tiger@iihero.oracledb -v -resolve Or acleJavaProc.java arguments: '-u' 'scott/tiger@iihero.oracledb '-v' '-resolve' 'OracleJavaProc.java' creating : source OracleJavaProc loading : source OracleJavaProc resolving: source OracleJavaProc
  查询一下状态:
  连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production SQL& SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE 'JAVA%'; OBJECT_NAME -------------------------------------------------------------------------------- OBJECT_TYPE STATUS ------------------------------------ -------------- OracleJavaProc JAVA CLASS VALID OracleJavaProc JAVA SOURCE VALID
  测试一下存储过程:
  SQL& create or replace procedure add_salgrade(id number, losal number, hisal num ber) as language java name 'OracleJavaProc.addSalGrade(int, int, int)'; 2 / 过程已创建。 SQL& set serveroutput on size 2000 SQL& call dbms_java.set_output(2000); 调用完成。 SQL& execute add_salgrade(6, 1); Creating new salgrade for EMPLOYEE... PL/SQL 过程已成功完成。 SQL& select * from salgrade where grade=6; GRADE LOSAL HISAL ---------- ---------- ---------- 6
  二、如何更新你已经编写的java存储过程?
  假如要往类OracleJavaProc里添加一个存储过程方法,如何开发?
  正确的步骤应该是先dropjava, 改程序,再loadjava。
  e.g.修改OracleJavaProc类内容如下:
  import java.sql.*; import oracle.jdbc.*; public class OracleJavaProc { // Add a salgrade to the database. public static void addSalGrade(int grade, int losal, int hisal) { System.out.println("Creating new salgrade for EMPLOYEE..."); try { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); String sql = "INSERT INTO salgrade " + "(GRADE,LOSAL,HISAL) " + "VALUES(?,?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1,grade); pstmt.setInt(2,losal); pstmt.setInt(3,hisal); pstmt.executeUpdate(); pstmt.close(); } catch(SQLException e) { System.err.println("ERROR! Adding Salgrade: " + e.getMessage()); } } public static int getHiSal(int grade) { try { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); String sql = "SELECT hisal FROM salgrade WHERE grade = ?"; PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, grade); ResultSet rset = pstmt.executeQuery(); int res = 0; if (rset.next()) { res = rset.getInt(1); } rset.close(); } catch (SQLException e) { System.err.println("ERROR! Querying Salgrade: " + e.getMessage()); return -1; } } }
  如何更新呢?
  D:eclipse3.1workspacedbtest&dropjava -u scott -v OracleJavaProc D:/tiger@iihero.oracledbeclipse3.1workspacedbtest&loadjava -u scott -v -resolve Or acleJavaProc/tiger@iihero.oracledb.java arguments: '-u' 'scott/tiger@iihero.oracledb' '-v' '-resolve' 'OracleJavaProc.java' creating : source OracleJavaProc loading : source OracleJavaProc resolving: source OracleJavaProc
  后边的应用示例:
  SQL& create or replace function query_hisal(grade number) return number as langu age java name 'OracleJavaProc.getHiSal(int) return int'; 2 / 函数已创建。 SQL& set serveroutput on size 2000 SQL& call dbms_java.set_output(2000); 调用完成。 SQL& select query_hisal(5) QUERY_HISAL(5) -------------- 9999
[ 责任编辑:之极 ]
去年,手机江湖里的竞争格局还是…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注ChinabyteJava调用Oracle存储过程详解
转载 &更新时间:日 16:36:44 & 投稿:lqh
这篇文章主要介绍了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
INSERT INTO test (id, name) VALUES (PARA1, PARA2);
END insert_
/*存储过程 返回结果集*/
CREATE OR REPLACE PROCEDURE select_procedure(
para_id IN VARCHAR2,
name OUT sys_refcursor /* 这个sys_refcursor类型在SYS.STANDARD包中 */
OPEN name FOR
SELECT * FROM test WHERE id = para_
2、JDBC工具类
import java.sql.C
import java.sql.DriverM
import java.sql.ResultS
import java.sql.SQLE
import java.sql.S
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";
* 通过静态代码块 注册数据库驱动
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
* 获得Connection
public static Connection getConnection() {
Connection conn =
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
* 获得Statement
public static Statement getStatement() {
Statement st =
st = getConnection().createStatement();
} catch (SQLException e) {
e.printStackTrace();
* 关闭ResultSet
* @param rs
public static void closeResultSet(ResultSet rs) {
if (rs != null) {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
* 关闭Statement
* @param st
public static void closeStatement(Statement st) {
if (st != null) {
st.close();
} catch (SQLException e) {
e.printStackTrace();
* 关闭Connection
* @param conn
public static void closeConnection(Connection conn) {
if (conn != null) {
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.CallableS
import java.sql.C
import java.sql.PreparedS
import java.sql.ResultS
import java.sql.SQLE
import oracle.jdbc.driver.OracleT
* 测试调用存储过程
public class StoredTest {
public static void main(String[] args) {
insert_call();
//select_call();
* 执行存储过程 插入数据
public static void insert_call() {
Connection conn = DBUtil.getConnection();
PreparedStatement pst =
CallableStatement proc = // 创建执行存储过程的对象
proc = conn.prepareCall("{ call insert_procedure(?,?) }");
proc.setString(1, "1"); // 设置第一个输入参数
proc.setString(2, "hello call"); // 设置第一个输入参数
proc.execute();// 执行
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭IO流
proc.close();
DBUtil.closeAll(null, pst, conn);
} catch (Exception e) {
e.printStackTrace();
* 执行存储过程 查询数据
public static void select_call() {
Connection conn = DBUtil.getConnection();
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);
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具15:35 提问
Oracle 的months_between(函数)转成java代码
这是从网上复制的
不知道对不对
最好能解释下months_between(函数)的源码是怎么操作的
public class Months_between {
* 计算两个日期相差的月份数
* @param date1 日期1
* @param date2 日期2
* @param pattern
日期1和日期2的日期格式
* @return 相差的月份数
private Date date1;
private Date date2;
public static int countMonths(String date1, String date2, String pattern) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(sdf.parse(date1));
c2.setTime(sdf.parse(date2));
int year = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR);
/*//开始日期若小月结束日期
if (year & 0) {
return year * 12 + c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH);
return year * 12 + c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
按赞数排序
因为是两个日期差,所以可能第一个大,也可能第二个大,所以if (year & 0) 后需要颠倒下
year * 12 + c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
颠倒下就是
-year * 12 - c2.get(Calendar.MONTH) + c1.get(Calendar.MONTH);
return -year * 12 + c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH);
return year * 12 + c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH);
计算两个月差多少个月。
int year = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR);
先算出差多少整年,year * 12
再加上头尾差多少个月c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH);
比如2016年8月到2018年4月
那么year=2
月份相差是-4
结果就是2*12+(-4)=20个月
c1.get(Calendar.MONTH) 返回4
c1.get(Calendar.YEAR) 返回 2018
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐  存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。今天,我们就开始学习java中调用oracle的存储过程。
java中调用oracle的存储过程
项目结构如下:
一、 在数据库创建存储过程的脚本,如果使用的是本地的oracle数据库,则需要开启服务:OracleOraDb11g_home1TNSListener和OracleServiceORCL。
存储过程实现:输入用户的工号,输出用户的名字、薪水和工作。
create or replace procedure queryempinfo(eno in number,
pename out varchar2,
psal out number,
pjob out varchar2)
--得到该员工的姓名 月薪和职位
select ename, sal, job into pename, psal, pjob from emp where empno =
二、 在项目中引入oracle的jdbc的jar包,Procedure的代码如下:
package com.tomhu.
import java.sql.CallableS
import java.sql.C
import java.sql.DriverM
import java.sql.ResultS
import java.sql.SQLE
import oracle.jdbc.OracleT
public class Procedure {
private CallableS
private ResultS
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String driverName = "oracle.jdbc.driver.OracleDriver";
String username = "scott";
String password = "******";
String sql = "call queryempinfo(?,?,?,?)";
// 调用存储过程
public void callProcedure() {
Class.forName(driverName);
conn = DriverManager.getConnection(url, username, password);
stat = conn.prepareCall(sql);
// 一个输入参数和三个输出参数
stat.setInt(1, 7566);
stat.registerOutParameter(2, OracleTypes.VARCHAR);
stat.registerOutParameter(3, OracleTypes.NUMBER);
stat.registerOutParameter(4, OracleTypes.VARCHAR);
stat.execute();
String name = stat.getString(2);
int sal = stat.getInt(3);
String job = stat.getString(4);
System.out.println("name: " + name + ", sal: " + sal + ", job: " + job);
} catch (Exception e) {
e.printStackTrace();
} finally {
close(conn, stat, rs);
// 关闭连接
public void close(Connection conn, CallableStatement stat, ResultSet rs) {
if (rs != null) {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (stat != null) {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
public static void main(String[] args) {
new Procedure().callProcedure();
三、 得到的输出结果:
name: JONES, sal: 2975, job: MANAGER
jdbc的jar包:
http://www.cnblogs.com/huhx/p/JavaProcedure.html
阅读(...) 评论()我所写的,都是被我所验证过的
java下实现调用oracle的存储过程和函数
在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(',SYSDATE);
INSERT INTO stock_prices values(',SYSDATE);
INSERT INTO stock_prices values(',SYSDATE);
INSERT INTO stock_prices values(',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
AN_O_RET_CODE := 0;
AC_O_RET_MSG
:= '操作成功';
OPEN CUR_RET FOR
SELECT * FROM STOCK_PRICES WHERE PRICE&AN_I_PRICE;
WHEN OTHERS THEN
AN_O_RET_CODE := -1;
AC_O_RET_MSG
:= '错误代码:' || SQLCODE || CHR(13) || '错误信息:' || SQLERRM;
END P_GET_PRICE;
5.创建函数:
--创建函数:F_GET_PRICE
CREATE OR REPLACE FUNCTION F_GET_PRICE(v_price IN NUMBER)
RETURN PKG_PUB_UTILS.REFCURSOR
stock_cursor PKG_PUB_UTILS.REFCURSOR;
OPEN stock_cursor FOR
SELECT * FROM stock_prices WHERE price & v_
RETURN stock_
6.JAVA调用存储过程返回结果集
JDBCoracle10G_INVOKEPROCEDURE.java
import java.sql.*;
import oracle.jdbc.OracleCallableS
import oracle.jdbc.OracleT
/* 本例是通过调用oracle的存储过程来返回结果集:
* oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip
public class JDBCoracle10G_INVOKEPROCEDURE {
Connection conn =
Statement statement =
ResultSet rs =
CallableStatement stmt =
String in_
public JDBCoracle10G_INVOKEPROCEDURE()
driver = "oracle.jdbc.driver.OracleDriver";
url = "jdbc:oracle:thin:@localhost:1521:ORCL";
// oracle 用户
user = "test";
// oracle 密码
pwd = "test";
// mysid:必须为要连接机器的sid名称,否则会包以下错:
// java.sql.SQLException: Io 异常: Connection
// refused(DESCRIPTION=(TMP=)(VSNNUM=)(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");
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("报错!");
// 取的结果集的方式一:
rs = ((OracleCallableStatement) stmt).getCursor(3);
// 取的结果集的方式二:
// rs = (ResultSet) stmt.getObject(3);
// 对结果进行输出
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.OracleCallableS
import oracle.jdbc.OracleT
/* 本例是通过调用oracle的函数来返回结果集:
* oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip
public class JDBCoracle10G_INVOKEFUNCTION {
Connection conn =
Statement statement =
ResultSet rs =
CallableStatement stmt =
String in_
public JDBCoracle10G_INVOKEFUNCTION()
driver = "oracle.jdbc.driver.OracleDriver";
url = "jdbc:oracle:thin:@localhost:1521:ORCL";
// oracle 用户
user = "test";
// oracle 密码
pwd = "test";
// mysid:必须为要连接机器的sid名称,否则会包以下错:
// java.sql.SQLException: Io 异常: Connection
// refused(DESCRIPTION=(TMP=)(VSNNUM=)(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");
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);
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();
没有更多推荐了,

我要回帖

更多关于 java8函数式编程 的文章

 

随机推荐