如何在Oracle中使用Java存储过程(详解)

合集下载

如何在Oracle中使用Java存储过程(详解)

如何在Oracle中使用Java存储过程(详解)

如何在Oracle中使用Java存储过程(详解)如何在Oracle中使用Java存储过程(详解)一、如何缔造java存储过程?通常有三种步骤来缔造java存储过程。

1. 使用oracle的sql语句来缔造:e.g. 使用create or replace and compile java source named "" as后边跟上java源程序。

要求类的步骤必须是public static的,威力用于存储过程。

1.SQL> create or replace and compile java source named "javademo1"2. as3. import java.sql.*;4. public class JavaDemo15. {6. public static void main(String[] argv)7. {8. System.out.println("hello, java demo1");9. }10. }11. /12.13.Java 已14.15.缔造。

16.17.SQL> show errors java source "javademo1"18.没有19.20.舛误。

21.22.SQL> create or replace procedure javademo123. 2 as24.3 language java name JavaDemo1.main(/doc/58c87bea102de2bd970 58806.html ng.String[]);25. 4 /26.27.过程已28.30.31.SQL> set serveroutput on32.SQL> call javademo1();33.34.调用35.实现。

36.37.SQL> call dbms_java.set_output(5000);38.39.调用40.实现。

Java调用Oracle存储过程详解

Java调用Oracle存储过程详解

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) ASBEGININSERT INTO test (id, name) VALUES (PARA1, PARA2);END insert_procedure;/*存储过程返回结果集*/CREATE OR REPLACE PROCEDURE select_procedure(para_id IN VARCHAR2,name OUT sys_refcursor /* 这个sys_refcursor类型在SYS.STANDARD包中 */) ASBEGINOPEN name FORSELECT * FROM test WHERE id = para_id;END;2、JDBC⼯具类import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;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";/*** 通过静态代码块注册数据库驱动*/static {try {Class.forName(DRIVER);} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 获得Connection** @returnConnection conn = null;try {conn = DriverManager.getConnection(URL, USERNAME, PASSWORD); } catch (SQLException e) {e.printStackTrace();}return conn;}/*** 获得Statement** @return*/public static Statement getStatement() {Statement st = null;try {st = getConnection().createStatement();} catch (SQLException e) {e.printStackTrace();}return st;}/*** 关闭ResultSet** @param rs*/public static void closeResultSet(ResultSet rs) {if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}}/*** 关闭Statement** @param st*/public static void closeStatement(Statement st) {if (st != null) {try {st.close();} catch (SQLException e) {e.printStackTrace();}}}/*** 关闭Connection** @param conn*/public static void closeConnection(Connection conn) {if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}/*** 关闭全部** @param rs* @param sta* @param connpublic static void closeAll(ResultSet rs, Statement sta, Connection conn) {closeResultSet(rs);closeStatement(sta);closeConnection(conn);}}3、调⽤存储过程:import java.sql.CallableStatement;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import oracle.jdbc.driver.OracleTypes;/*** 测试调⽤存储过程**/public class StoredTest {public static void main(String[] args) {insert_call();//select_call();}/*** 执⾏存储过程插⼊数据*/public static void insert_call() {Connection conn = DBUtil.getConnection();PreparedStatement pst = null;CallableStatement proc = null; // 创建执⾏存储过程的对象try {proc = conn.prepareCall("{ call insert_procedure(?,?) }");proc.setString(1, "1"); // 设置第⼀个输⼊参数proc.setString(2, "hello call"); // 设置第⼀个输⼊参数proc.execute();// 执⾏} catch (SQLException e) {e.printStackTrace();} finally {try {// 关闭IO流proc.close();DBUtil.closeAll(null, pst, conn);} catch (Exception e) {e.printStackTrace();}}}/*** 执⾏存储过程查询数据*/public static void select_call() {Connection conn = DBUtil.getConnection();CallableStatement stmt;try {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);}}感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!。

JAVA调用ORACLE存储过程小结

JAVA调用ORACLE存储过程小结

JAVA调用ORACLE存储过程小结在Java中调用Oracle存储过程可以使用JDBC(Java Database Connectivity)技术。

JDBC是一种用于执行SQL语句和数据库操作的API。

在本文中,我们将讨论如何在Java中调用Oracle存储过程。

在调用Oracle存储过程之前,我们需要创建一个连接到数据库的JDBC连接。

这可以通过以下步骤完成:2. 创建数据库连接:使用JDBC驱动程序创建一个Connection对象来与数据库建立连接。

需要提供数据库的URL,用户名和密码。

例如:```String username = "your_username";String password = "your_password";Connection connection = DriverManager.getConnection(url, username, password);```这里的URL是连接到Oracle数据库的URL。

localhost表示连接的是本地主机,1521是Oracle数据库的默认端口,xe是Oracle Express Edition的默认数据库实例。

3. 调用存储过程:通过创建一个CallableStatement对象来调用存储过程。

首先,我们需要构造一个SQL语句,其中包含对存储过程的调用。

假设我们要调用一个名为`get_employee`的存储过程,它接受一个员工ID作为参数,并返回该员工的姓名和薪水。

在Java代码中,可以这样调用存储过程:```String sql = "{call get_employee(?,?,?)}";CallableStatement statement = connection.prepareCall(sql);```这里的`?`是占位符,表示存储过程的参数。

通过调用`connection.prepareCall(`方法,可以创建一个CallableStatement对象,并将SQL语句作为参数传递给它。

跟我学Oracle数据库系统管理和实现——应用Java JDBC 调用Oracle数据库存储过程的应用实例

跟我学Oracle数据库系统管理和实现——应用Java JDBC 调用Oracle数据库存储过程的应用实例

(3)在PLSQL Developer中创建出 相关的存储过程及代 码代码
(4)在MyEclipse开发工具中创建类名称为 JdbcOracleProcedureWithOutResult,程序包名称为 com.px1987.javaoracle.dao.imple的Java程序类
(5)相关的Java程序的核心代码示例
7、Java JDBC调用Oracle存储过程相关函数的代码示例
使用JDBC调用函数的过程与JDBC调用存储过程非常类似, 但由于函数是由返回值的,因此要注册返回参数类型和获得返回 值。如下为调用的代码示例:
注意:使用JDBC调用函数或者过程获取多行查询结果,则需要使 用游标定义返回的数据集。
8、应用JDBC调用带输入参数值的Oracle存储过程的应用示 例
(1)创建数据库表someOneTable
Create table someOneTable (someOneField number(3,0), someTwoField varchar2 (20));
(2)在PLSQL Developer中创建出相关的存储过程及代码代码 1)在PLSQL Developer中应用过程模板创建过程,只需要选 择“文件”菜单中的“新建”——“程序窗口”——“过程”子 菜单 2)将出现存储过程的创建 模板窗口的对话框,在该对话 框的名称栏中输入存储过程的 名称,而在参数栏中输入存储 过程所需要的参数(本示例不 需要参数)。
3)点击对话框中的“确定”按钮,在存储过程的面板中输入 存储过程的代码,最终结果如下图所示。
4)编译该存储过程(产生出存储过程的机器码)
(3)在MyEclipse开发工具中创建类名称为 JdbcOracleProcedureWithOutResult,程序包名称为 com.px1987.javaoracle.dao.imple的Java程序类

用java调用oracle存储过程总结3-返回列表-偶爱老婆-搜狐博客

用java调用oracle存储过程总结3-返回列表-偶爱老婆-搜狐博客

用java调用oracle存储过程总结3-返回列表-偶爱老婆-搜狐博客三:返回列表由于oracle存储过程没有返回值,它的所有返回值都是通过out 参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,1,建一个程序包。

如下:CREATE OR REPLACE PACKAGE TESTPACKAGE ASTYPE Test_CURSOR IS REF CURSOR;end TESTPACKAGE;2,建立存储过程,存储过程为:CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.T est_CURSOR) ISBEGINOPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;END TESTC;可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。

在java里调用时就用下面的代码:package com.hyq.src;import java.sql.*;import java.io.OutputStream;import java.io.Writer;import java.sql.PreparedStatement;import java.sql.ResultSet;import oracle.jdbc.driver.*;public class TestProcedureTHREE {public TestProcedureTHREE() {}public static void main(String[] args ){String driver = "oracle.jdbc.driver.OracleDriver";String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";Statement stmt = null;ResultSet rs = null;Connection conn = null;try {Class.forName(driver);conn = DriverManager.getConnection(strUrl, "hyq", "hyq");CallableStatement proc = null;proc = conn.prepareCall("{ call hyq.testc(?) }");proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURS OR);proc.execute();rs = (ResultSet)proc.getObject(1);while(rs.next()){System.out.println("<tr><td>" + rs.getString(1) + "</td><td>"+rs.getString(2)+"</td></tr>");}}catch (SQLException ex2) {ex2.printStackTrace();}catch (Exception ex2) {ex2.printStackTrace();}finally{try {if(rs != null){rs.close();if(stmt!=null){stmt.close();}if(conn!=null){conn.close();}}}catch (SQLException ex1) { }}}}。

Java,PLSQL调用 ORACLE存储函数以及存储过程

Java,PLSQL调用 ORACLE存储函数以及存储过程

黑马程序员:Java,PL/SQL 调用 ORACLE 存储函数以及存储过程准备工作创建表 --- 创建测试用表 schoolCREATE TABLE school( ID number, --学校 id ---学校名NAME VARCHAR2(30) ); --- 添加数据INSERT into school values(1,'北京大学'); INSERT into school values(2,'南京大学'); INSERT into school values(1,'东京大学'); COMMIT;编写 java 代码连接数据库,获取 Connection 连接对象 public class OracleUtil { // 加载 Oracle 驱动 static { try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) {黑马程序员郑州中心 编著e.printStackTrace(); } } // 获取数据库连接public static Connection getConnection() throws SQLException { Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@iP:1521:orcl", "system", "密码"); return connection; } } ——-存储函数——1.什么是存储函数存储函数又称为自定义函数。

可以接收一个或多个参数,返回一个结果。

在函数 中我们可以使用 PL/SQL 进行逻辑的处理。

Oracle8i中使用Java语言来开发存储过程

Oracle8i中使用Java语言来开发存储过程

Oracle8i中使用Java语言来开发存储过程在Oracle8i之前,开发人员只能使用PL/SQL来开发存储过程。

而在Oracle8i之中,不仅可以使用原有的PL/SQL开发存储过程,而且也可以使用Java语言来开发存储过程。

本篇文章将简单介绍关于这方面的知识,包括以下内容:∙存储过程简介;∙Java存储过程∙Java存储过程的开发步骤∙使用Java开发过程;∙使用Java开发函数;∙使用Java开发包;∙使用Java开发触发器;∙使用Java开发对象方法;∙使用JDeveloper开发JSP。

存储过程简介存储过程是存储在数据库中的一段存储程序。

当创建存储过程时,系统会对其进行编译,并将执行代码存储到数据库中。

设计存储过程的方针∙在定义存储过程时,要使用其完成单一、相对集中的任务。

∙在定义存储过程时,不要定义已经由其它特征所提供功能的过程。

例如,不要定义强制数据完整性的过程(使用完整性约束)。

2. 存储过程的优点1) 安全性当创建了存储过程之后,可以将执行该过程的权限授予其它用户,从而使得他可以执行特定的数据库操作,而不能访问其它模式对象(例如表)。

例如,你可以将执行过程(更新表)的权限授予其它用户,但不授予它们直接访问该表的权限。

2) 性能∙存储过程只被发送到数据库一次,相对于SQL语句或PL/SQL块而言,其网络通信量更小。

∙当调用存储过程时,数据库会直接运行该存储过程,无需进行编译。

相对于SQL语句或PL/SQL块而言,其执行速度更快。

3) 内存分配存储过程充分利用了Oracle共享内存的能力。

在将存储过程装载到内存中后,多个用户可以同时调用该存储过程,从而降低了应用对Oracle的实际内存需求。

4) 生产力存储过程提高了开发生产力。

通过将公共集合编写为存储过程,避免了冗余代码,从而提高了开发生产力。

例如,我们可以编写用于插入、更新、删除AUTHS表的过程,此后应用可以直接调用这些过程,而无需重写SQL语句。

Oracle中基于Java的存储过程

Oracle中基于Java的存储过程

第四章用PL/SQL和Java开发Oraclegi应用程序Java存储过程同PL/SQL存储过程一样,运行在Oracle服务器端。

PL/SQL存储过程和Java存储过程可以相互调用,但是Java存储过程可以利用Java语言的功能来完成一些PL/SQL存储过程完成不了的工作。

1.首先请打开PL/SQLdeveloper,输入用户名/密码和数据库的服务名,如下图4--1所示:图4一l登陆界砸进入系统后,您可以看见左边的各类导航栏,如图4—2所示:图4—2导航条界面2.在下图的JavaSource文件夹上右击,系统会弹出一个浮动菜单,单击菜单条上的。

New…”菜单,系统要求用户输入Java存储过程的名称和类名,如图4—3所示;Oracle中基于Java的存储过程图4—3输入Java存储过程的名称和类名界面我们输入FirstJava作为类名并按oK按钮,然后我们就进入了PL/SQLDeveloper的ProgramWindow,如图4—4所示:图4—4程序窗口上面程序窗口的第一行是createorreplaceandcompilejavasourcenamedFirstJavaas这一行要求Oracle创建一个名为“FirstJava”的Java存储过程并编译它,不用修改这一行。

第二到第七行是我们非常熟悉的普通Java类的源代码,一旦看到它,便可以随心所欲地修改这些Java代码了。

第四章用eL/SOL和Java开发Oracle9i应用程序在FirstJava类中添加两个静态方法。

在第一个方法(hello)中没有数据库交互,第二个方法(get_current_time)查询数据库并返回了数据库服务器的当前日期。

图4—5程序窗口请注意get_current_time方法中注册Oracle驱动类和获得数据库连接的写法。

因为上面的Java类已经在Oracle环境中运行,所以普通JDBc连接中的连接串(jdbc:oracle:thin:user/pwd@hostname:1521:instance_name)在该方法中没有出现,java.1ang.Class.forName(“oracle.jdbc.driver.OracleDriver”)在该方法中也没有出现。

oracle存储过程调用javasource的方法

oracle存储过程调用javasource的方法

oracle存储过程调用javasource的方法Oracle存储过程调用Java方法介绍在Oracle数据库中,我们可以使用存储过程来执行一系列的数据库操作。

有时候,我们希望在存储过程中调用Java方法,以实现一些比较复杂的逻辑。

本文将详细介绍在Oracle存储过程中调用Java方法的几种方法。

方法一:使用Java Stored ProcedureJava Stored Procedure是Oracle数据库提供的一种特殊的存储过程类型,在该类型的存储过程中可以直接调用Java方法。

步骤:1.创建Java类,并将其编译成字节码文件(.class文件)。

2.将字节码文件导入到数据库中,可以使用loadjava工具或通过SQL语句执行导入。

3.创建Java Stored Procedure,将其指定为刚导入的字节码文件,并编写实际的存储过程逻辑。

4.在需要的地方调用Java Stored Procedure。

优点:•简单易用,只需创建Java类和Java Stored Procedure即可。

•可以直接访问数据库,无需通过其他方式。

缺点:•必须将Java类编译成字节码文件并导入到数据库中,稍显麻烦。

•Java Stored Procedure在数据库中运行,可能会造成数据库性能的损耗。

方法二:使用外部过程调用Java方法Oracle数据库通过提供外部过程功能,允许我们在存储过程中调用外部的Java方法。

步骤:1.将Java方法包装成Java函数或Java过程,并将其编译成动态加载库文件(.so或.dll文件)。

2.使用CREATE LIBRARY语句在数据库中创建对应的外部库。

3.创建存储过程,将其指定为调用外部库中的函数或过程,并编写实际的存储过程逻辑。

4.在需要的地方调用存储过程。

优点:•可以方便地调用已存在的Java方法,无需修改原有代码。

•外部过程在数据库外部运行,不会对数据库性能造成影响。

java调用oracle存储过程

java调用oracle存储过程

Java 调用存储过程为了同学们方便请使用system用户登录操作(一)创建表T_DEMO1CREATE TABLE system.T_DEMO1( "ID" number,"NAME" varchar)(二)注意,如果scott没有创建存储过程的权限,可以用sys用户登录创建权限创建存储过程create or replace procedure p_demo1(para1 in number,para2 in varchar2) isbeginINSERT INTO scott.t_demo1(id,name) VALUES (PARA1, PARA2);commit ;end p_demo1;(3)创建存储过程和创建表一样都可以在navicate或pl/sql或sql/plus 里执行。

看存储过程是否可用可以在sql/plus 活在pl/sql或navicat工具里面执行call p_demo1(1,'rrr') ;看看存储过程是否成功(4)java调用无返回值的存储过程请查看CallProdures1代码以下是调用有返回值的存储过程(1)创建存储过程CREATE OR REPLACE PROCEDURE p_demo2(PARA1 in number,PARA2 OUT VARCHAR2) ASBEGINSELECT name INTO PARA2 FROM scott.t_demo1 WHERE id= PARA1;END p_demo2;(2)请查看CallDemo2例子以下是调用返回是列表的存储过程(1)由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用package了.所以要分两部分(2)创建包(package)CREATE OR REPLACE PACKAGE p_package ASTYPE Test_CURSOR IS REF CURSOR;end p_package;(3)创建存储过程CREATE OR REPLACE PROCEDURE p_demo3(p_CURSOR out p_package.Test_CURSOR) ISBEGINOPEN p_CURSOR FOR SELECT * FROM scott.t_demo1;END p_demo3;(4)具体代码参考CallDemo3。

java oracle存储过程写法及调用

java oracle存储过程写法及调用

java oracle存储过程写法及调用Java中调用和编写Oracle存储过程是非常常见的操作,可以利用存储过程来执行数据库操作,提高数据库的性能和安全性。

本文将为您详细介绍Java中调用和编写Oracle存储过程的方法和步骤。

一、什么是Oracle存储过程?Oracle存储过程是一段预定义在数据库中的PL/SQL代码,可以像函数一样接收参数和返回值,用于完成特定的数据库操作。

存储过程可以包含SQL语句、逻辑控制语句、流程控制语句等,可以完成复杂的业务逻辑和数据库操作。

二、Java中调用Oracle存储过程的步骤1. 导入相关的JDBC驱动在Java中调用Oracle存储过程之前,首先需要导入相关的JDBC驱动。

可以从Oracle官网下载相应版本的JDBC驱动,将其添加到Java项目的classpath中。

2. 建立数据库连接使用JDBC的Connection对象与数据库建立连接。

可以使用如下代码建立连接:String url = "jdbc:oracle:thin:localhost:1521:orcl";String username = "username";String password = "password";Connection conn = DriverManager.getConnection(url, username, password);需要将url、username和password替换为实际的数据库连接信息。

3. 创建CallableStatement对象使用Connection对象的prepareCall方法创建CallableStatement对象,该对象用于执行存储过程的调用。

String sql = "{call 存储过程名称(?, ?)}";CallableStatement cstmt = conn.prepareCall(sql);需要将存储过程名称替换为实际的存储过程名称。

java调用存储过程

java调用存储过程

Java 调用存储过程PL/SQL子程序,很多情况下是给应用程序来调用的,所有我们要掌握使用其他编程语言来调用我们写好的存储过程。

下面我们介绍下使用java调用Oracle的存储过程。

1.配置调用类package com.mscncn.plsql.util;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DBUtil {static{try {Class.forName("oracle.jdbc.OracleDriver");} catch (ClassNotFoundException e) {e.printStackTrace();}}public static Connection getConntection(){Connection ct=null;try {ct = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.25:1521:oracle","scott","scott");} catch (SQLException e) {e.printStackTrace();}return ct;}}2.编写存储过程create or replace package pro_pk istype pager_cursor is ref cursor;procedure add_dept(dept_no in number,dept_name in varchar2,location in varchar2);procedure delete_dept(dept_no in number,num out number);end pro_pk;create or replace package body pro_pk isprocedure add_dept(dept_no in number,dept_name in varchar2,location in varchar2)isexp_remaining exception;pragma exception_init(exp_remaining,-1);/*非预定义错误,-1是违反唯一约束*/ begininsert into dept values(dept_no,dept_name,location);if sql%found then /*隐式游标,sql*/return 1;elsereturn 0;end if;exceptionwhen exp_remaining thendbms_output.put_line('违反唯一约束.');end add_dept;procedure delete_dept(dept_no in number,num out number)isbegindelete from dept where deptno=dept_no;if sql%found thennum:=1;elsenum:=1;end if;end delete_dept;end pro_pk;create or replace package pageUtil istype page_cursor is ref cursor;--定义一个游标类型procedure pager(tName in varchar2, --表名pageNum in number, --页数pageSize in number,--每页记录数totalRecord out number,--总记录数totalPage out number,--总页数p_cursor out page_cursor);end pageUtil;create or replace package body pageUtil isprocedure pager(tName in varchar2, --表名pageNum in number, --页数pageSize in number,--每页记录数totalRecord out number,--总记录数totalPage out number,--总页数p_cursor out page_cursor) is--定义sql语句字符串v_sql varchar2(1000);--分页开始位置,与结束位置v_begin number:=(pageNum-1)*pageSize+1;v_end number:=pageNum*pageSize;beginv_sql:='select * from ( select t.*,rownum rn from '||tName||' t where rownum<='||v_end||') where rn>='||v_begin;--把游标和sql关联dbms_output.put_line(v_sql);open p_cursor for v_sql;--计算totalRecord与totalPagev_sql:='select count(*) from '||tName;--execute immediate v_sql into totalRecord;if mod(totalRecord,pageSize)=0 thentotalPage:=totalRecord/pageSize;elsetotalPage:=totalRecord/pageSize+1;end if;--关闭游标,这儿需要注意,如果我们在java程序中使用cursor,那么就一定不能关闭cursor--否则关闭cursor后,java程序中返回的结果集就是null--close p_cursor;end pager;end pageUtil;3.调用存储过程1)调用没有返回值的存储过程/*** java调用没有返回值的存储过程*/@Testpublic void proNoReulstTest(){Connection ct=DBUtil.getConntection();try {CallableStatement cs=ct.prepareCall("{call pro_pk.add_dept(?,?,?)}");cs.setInt(1, 13);cs.setString(2, "java开发部");cs.setString(3, "中国信阳");cs.execute();} catch (SQLException e) {e.printStackTrace();}finally{try {ct.close();} catch (SQLException e) {e.printStackTrace();}}}2)调用有返回值的存储过程/*** java调用有返回值的存储过程(返回值类型为number)*/@Testpublic void proHasReulstTest(){Connection ct=DBUtil.getConntection();try {CallableStatement cs=ct.prepareCall("{call pro_pk.delete_dept(?,?)}");cs.setInt(1, 13);//注册第二个参数为存储过程的返回值cs.registerOutParameter(2, OracleType.STYLE_INT);cs.execute();//通过参数的索引,来获取存储过程的返回值,索引从1开始int num=cs.getInt(2);System.out.println(num==1?"删除成功":"删除失败");} catch (SQLException e) {e.printStackTrace();}finally{try {ct.close();} catch (SQLException e) {e.printStackTrace();}}}3)java程序调用存储过程返回值为游标/*** 存储过程返回一个游标*/@Testpublic void proReturnCursorTest(){Connection ct=DBUtil.getConntection();try {CallableStatement cs=ct.prepareCall("{call pageUtil.pager(?,?,?,?,?,?)}");cs.setString(1, "emp");cs.setInt(2, 2);cs.setInt(3, 5);cs.registerOutParameter(4, OracleTypes.NUMBER);cs.registerOutParameter(5, OracleTypes.NUMBER);cs.registerOutParameter(6, OracleTypes.CURSOR);cs.execute();//通过参数的索引,来获取存储过程的返回值,索引从1开始int totalRecord=cs.getInt(4);int totalPage=cs.getInt(5);ResultSet rs=(ResultSet)cs.getObject(6);System.out.println("总记录数为:"+totalRecord+",总页数为:"+totalPage);while(rs.next()){System.out.println("雇员编号:"+rs.getInt("empno")+",雇员姓名:"+rs.getString("ename"));}} catch (SQLException e) {e.printStackTrace();}finally{try {ct.close();} catch (SQLException e) {e.printStackTrace();}} }。

oracle 存储过程调用java

oracle 存储过程调用java

oracle 存储过程调用java一收藏一、如何创建java存储过程?通常有三种方法来创建java存储过程。

1. 使用oracle的sql语句来创建:e.g. 使用create or replace and compile java source named "<name>" as后边跟上java源程序。

要求类的方法必须是public static的,才能用于存储过程。

SQL> create or replace and compile java source named "javademo1"2 as3 import java.sql.*;4 public class JavaDemo15 {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 javademo12 as3 language java name ''JavaDemo1.main(ng.String[])'';4 /过程已创建。

SQL> set serveroutput onSQL> call javademo1();调用完成。

SQL> call dbms_java.set_output(5000);调用完成。

SQL> call javademo1();hello, java demo1调用完成。

SQL> call javademo1();hello, java demo1调用完成。

Java调用Oracle的增删改查存储过程(供初学者学习)

Java调用Oracle的增删改查存储过程(供初学者学习)

------创建表 create table t_user ( id number(4 primary key, uname varchar2(20, age number(3 ; ((注意下面的语句结束后须加/才能执行 -----添加的存储过程 create or replace procedure tu_save ( id in number, uname in varchar, age in number as begin insert into t_user(id,uname,age values(id,uname,age; end tu_save; -----删除的存储过程create or replace procedure tu_del ( b_id in number as begin delete from t_user where id = b_id; end tu_del; -----修改的存储过程 create or replace procedure tu_update ( b_id in number, b_uname varchar, b_age number as begin update t_user set uname =b_uname,age = b_age where id = b_id; end tu_update; -----查询一条数据的存储过程create or replace procedure tu_query ( b_id in number, b_uname out varchar, b_age out number as begin select uname,age into b_uname,b_age from t_user where id = b_id; end tu_query; -----查询所有的存储过程(查询多个数据,步骤1,3,查询一条数据,步骤1,2 1.先创建程序包 create or replace package tu_queryAll as type aa_all is ref cursor; end tu_queryAll; 2.创建查询一条数据的查询 create or replace procedure tu_query1 ( b_id in number, b_all out tu_queryAll.aa_all as begin open b_all for select * fromt_user where id = b_id; end tu_query1; 3.利用程序包创建多查询 create or replace procedure tu_queryAlls ( b_all out tu_queryAll.aa_all as begin open b_all for select * from t_user; end tu_queryAlls; Java调用Oracle存储过程 ---1.创建连接数据库类import java.sql.*; public class UserDao { /** * 创建连接 */ public static Connection getConn( { Connection conn = null; try{ Class.forName("oracle.jdbc.driver.OracleDriver"; conn =DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:aptech","scott","tiger"; } catch (Exception e { // TODO Auto-generated catch block e.printStackTrace(; } return conn; } /** * 测试连接是否成功 */ public static void main(String[] args { Connection con = new UserDao(.getConn(; System.out.println(con; } } ---2.操作存储过程 import erDao; import java.sql.*; public class UserDaoImpl extends UserDao { private Connection conn = null; ResultSet res = null; CallableStatement cstm = null; /** * 增加一条数据 * @param id * @param uname * @param age */ public void save(int id,String uname,int age { try { conn = this.getConn(; cstm =conn.prepareCall("{call tu_save(?,?,?}"; cstm.setInt(1, id; cstm.setString(2, uname; cstm.setInt(3, age; cstm.execute(; } catch (Exception e { // TODO: handle exceptione.printStackTrace(; }finally{ try { cstm.close(; conn.close(;} catch (Exception e { // TODO: handle exception e.printStackTrace(; } } } /** * 删除一条数据 * @param id */ public void del(int id { try { conn = this.getConn(; cstm = conn.prepareCall("{call tu_del_pro(?}"; cstm.setInt(1, id; cstm.execute(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; }finally{ try { cstm.close(; conn.close(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; } } } /** * 修改一条数据 * @param id * @param uname * @param age */ public void update(int id,String uname,int age { try { conn = this.getConn(; cstm =conn.prepareCall("{call tu_update(?,?,?}"; cstm.setInt(1, id; cstm.setString(2, uname; cstm.setInt(3, age; cstm.execute(; } catch (Exception e { // TODO: handle exceptione.printStackTrace(; }finally{ try { cstm.close(; conn.close(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; } } } /** * 根据Id查询语句 * @param id */ public void query(int id { try { conn = this.getConn(; cstm = conn.prepareCall("{call tu_query(?,?,?}"; cstm.setInt(1, id; cstm.registerOutParameter(2, Types.VARCHAR; cstm.registerOutParameter(3, Types.INTEGER; cstm.execute(; String name =cstm.getString(2; int age = cstm.getInt(3; System.out.println(name+","+age; } catch (Exception e { // TODO: handle exception e.printStackTrace(; }finally{ try { cstm.close(; conn.close(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; } } } /** * 根据游标查询一条数据 */ public void query1(int id { try { conn = this.getConn(; cstm = conn.prepareCall("{call tu_query1(?,?}"; cstm.setInt(1, id;cstm.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR; cstm.execute(; res = (ResultSetcstm.getObject(2;if(res.next( { System.out.println("id="+res.getInt(1+",uname="+res.getString(2+",age="+ res.getInt(3; } } catch (Exception e { // TODO: handle exceptione.printStackTrace(; }finally{ try { res.close(; cstm.close(; conn.close(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; } } } /** * 查询所有数据 */ publicvoid queryAlls( { try { conn = this.getConn(; cstm = conn.prepareCall("{calltu_queryAlls(?}"; cstm.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR; cstm.execute(; res = (ResultSetcstm.getObject(1;while(res.next( { System.out.println("id="+res.getInt(1+",uname="+res.getString(2+",age ="+res.getInt(3; } } catch (Exception e { // TODO: handle exception e.printStackTrace(; }finally{ try { res.close(; cstm.close(; conn.close(; } catch (Exception e { // TODO: handle exception e.printStackTrace(; } } } /** * 调用方法进行增删改查 */ public static void main(String[] args { UserDaoImpl udao = new UserDaoImpl(; //udao.save(3,"wangwu", 23; // udao.del(3; // udao.update(1, "handan", 55; // udao.query(1; // udao.query1(3; // udao.queryAlls(; } }。

JAVA调用ORACLE存储过程小结

JAVA调用ORACLE存储过程小结

JAVA调用ORACLE存储过程小结在Java中调用Oracle存储过程是一个常见的需求,本文将给出一个关于如何在Java中调用Oracle存储过程的小结。

主要包括以下方面内容:1. 连接到Oracle数据库:首先需要使用Java的JDBC API来连接到Oracle数据库。

可以使用Oracle提供的JDBC驱动程序,通过加载驱动程序的方式来建立与数据库的连接。

在连接数据库时,需要提供数据库的URL、用户名和密码。

2. 构造存储过程的调用语句:在Java中调用Oracle存储过程时,需要构造一个适当的SQL语句来调用存储过程。

调用语句的格式为“{call 存储过程名(参数1, 参数2, ...)}”。

3. 设置存储过程的输入参数:在构造存储过程的调用语句后,需要通过PreparedStatement对象设置存储过程的输入参数。

这可以通过调用PreparedStatement对象的setXXX(方法来实现,其中XXX是参数的数据类型。

例如,如果输入参数是整数类型,则可以调用setInt(方法设置参数的值。

4. 执行存储过程:设置好存储过程的输入参数后,可以通过调用PreparedStatement对象的executeUpdate(或execute(方法来执行存储过程。

executeUpdate(方法适用于执行插入、更新或删除操作的存储过程,而execute(方法适用于执行查询操作的存储过程。

5. 获取存储过程的输出参数:执行存储过程后,可以通过PreparedStatement对象的getXXX(方法来获取存储过程的输出参数的值。

需要注意的是,存储过程的输出参数必须在执行存储过程之前通过调用registerOutParameter(方法来注册。

6. 关闭连接和释放资源:执行完存储过程后,需要关闭与数据库的连接,并释放相关的资源。

可以通过调用Connection对象的close(方法来关闭连接。

下面是一个示例代码,展示了如何在Java中调用Oracle存储过程:```javaimport java.sql.*;public class CallOracleProcedurepublic static void main(String[] args)Connection conn = null;CallableStatement stmt = null;try// 连接到Oracle数据库Class.forName("oracle.jdbc.driver.OracleDriver");//构造存储过程的调用语句String sql = "{call PROCEDURE_NAME(?, ?, ?)}";stmt = conn.prepareCall(sql);//设置存储过程的输入参数stmt.setString(1, "input1");stmt.setInt(2, 10);//注册存储过程的输出参数stmt.registerOutParameter(3, Types.VARCHAR);//执行存储过程stmt.executeUpdate(;//获取存储过程的输出参数String output = stmt.getString(3);System.out.println("Output: " + output);} catch (SQLException , ClassNotFoundException e) e.printStackTrace(;} finally//关闭连接和释放资源tryif (stmt != null) stmt.close(;if (conn != null) conn.close(;} catch (SQLException e)e.printStackTrace(;}}}```上述示例代码展示了如何通过Java程序调用Oracle存储过程。

用Java创建Oracle存储过程

用Java创建Oracle存储过程

用Java创建Oracle存储过程一、背景本实验的目的是在Oracle端(Sqlplus或Pl-Sql Developer)以存储过程(函数)的方式调用Java class类。

二、实现方式有两个步骤:创建Java class和创建存储过程,其中创建存储过程(函数)必须在Oracle 端进行,而创建java class则有两种方式,第一种是直接在Oracle端进行,第二种是Java IDE 中生成class后再导入到Oracle。

经实验测试,两种方式的效果相同。

为方便调试,本实验先按第一种方式进行,成功后将class和函数删除,再按第二种方式重新创建。

三、具体过程3.1 在Oracle端创建Java class在Sqlplus或Pl-Sql Developer的sql窗口中进行,示例代码如下:create or replace and compile java source named javatest aspublic class JavaTest{public static String encrypt(String data,String key){return data + " || " + key;}}执行后,会分别生成一个名为javatest的Java Source对象和Java class对象。

3.2 在Oracle端创建存储过程同样在Oracle端中进行,示例代码如下:create or replace function f_javatest_encrypt(p_data in varchar2, p_key in varchar2) return varchar2 aslanguage java name 'JavaTest.encrypt(ng.String, ng.String) return ng.String';执行后,会生成一个名为f_javatest_encrypt的函数。

使用Java编写Oracle存储过程

使用Java编写Oracle存储过程

通常我们都使用Ps/SQL为Oracle编写存储过程,从Oracle 8开始我们可以有另一种选择:Java。

8.0开始,Oracle自带一个JVM,内置对Java的支持,任何Java能做的事情你都可以放到Oracle里面来做,你甚至可以在里面操作db2。

这让Oracle具备了极其巨大的扩展能力,只要你愿意,完全可以开发一个trigger,让它在适当的时候给管理员的msn 发送一条即时消息。

好消息说完了,现在是坏消息:由于ps/SQL是过程化的语言,它基本上不具备多态的概念,供Oracle使用的Java 方法必须申明为static,所以在Oracle中你无法使用Java的动态特性,比如接口、反射等。

不过这并不妨碍你用Java做爱做的事。

我们以一个简单的hello world为例,我想任何一个有经验的Java程序员都能够通过这个例子,派生出其他希奇古怪的应用。

首先是创建一个Java类,你可以用Jbuilder/Eclipse来编写,也可以直接在Oracle的控制台里面创建。

前者不多说,看看后一种方式。

启动SQL plus,执行如下命令:Java程序已创建。

然后在Oracle中把这个类导入成为一个函数,执行命令:函数已创建现在可以调用该函数,执行:select hello('bromon') from dual;返回结果:你好,bromon有一个需要注意的问题是,假如我们的java方法是没有参数的,比如:那么在创建函数的时候,函数名不应该有扩号:hello_sp,否则会报告函数有编译错误。

如果你的Java类是在IDE里面编写的,那么只需要在oracle中加载编译过的class文件即可,方法是:启动enterprise manage console,在“方案”下找到“源类型”,右击”Java类”,选择”加载Java“,选择对应的class文件即可。

oracle存储过程调用javasource的方法(一)

oracle存储过程调用javasource的方法(一)

oracle存储过程调用javasource的方法(一)Oracle存储过程调用JavaSource的方法引言在Oracle数据库中,我们可以使用存储过程来进行复杂的数据处理和业务逻辑实现。

有时候,我们需要在存储过程中调用Java代码,以实现更复杂的功能。

本文将介绍一些在Oracle存储过程中调用JavaSource的方法。

方法一:使用CREATE JAVA语句创建Java类首先,我们可以使用CREATE JAVA语句在Oracle数据库中创建一个Java类,然后在存储过程中调用这个Java类的方法。

具体步骤如下: 1. 使用CREATE JAVA语句在Oracle数据库中创建一个Java类。

例如:CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "He lloWorld" ASpublic class HelloWorld {public static String sayHello(String name) {return "Hello, " + name + "!";}};2.创建一个存储过程,其中调用了刚刚创建的Java类的方法。

例如:CREATE OR REPLACE PROCEDURE callJavaMethod ISlanguage Java name '() return ';resultStr ;BEGINresultStr := ('World');DBMS__line(resultStr);END;3.执行存储过程,测试Java类的调用是否成功。

例如:BEGINcallJavaMethod;END;方法二:使用CREATE LIBRARY语句创建Java库另一种方式是使用CREATE LIBRARY语句在Oracle数据库中创建一个Java库,然后在存储过程中调用这个Java库。

java下实现调用oracle的存储过程和函数

java下实现调用oracle的存储过程和函数

java下实现调用oracle的存储过程和函数在oracle下创建一个test的账户,然后1.创建表:STOCK_PRICES[cpp]view plaincopyprint?1.--创建表格2.CREATE TABLE STOCK_PRICES(3.RIC VARCHAR(6) PRIMARY KEY,4.PRICE NUMBER(7,2),5.UPDATED DATE );2.插入测试数据:[sql]view plaincopyprint?1.--插入数据2.INSERT INTO stock_prices values('1111',1.0,SYSDATE);3.INSERT INTO stock_prices values('1112',2.0,SYSDATE);4.INSERT INTO stock_prices values('1113',3.0,SYSDATE);5.INSERT INTO stock_prices values('1114',4.0,SYSDATE);3.建立一个返回游标:PKG_PUB_UTILS[cpp]view plaincopyprint?1.--建立一个返回游标2.CREATE OR REPLACE PACKAGE PKG_PUB_UTILS IS3.--动态游标4.TYPE REFCURSOR IS REF CURSOR;5.END PKG_PUB_UTILS;4.创建和存储过程:P_GET_PRICE[sql]view plaincopyprint?1.--创建存储过程2.CREATE OR REPLACE PROCEDURE P_GET_PRICE3.(4.AN_O_RET_CODE OUT NUMBER,5.AC_O_RET_MSG OUT VARCHAR2,6.CUR_RET OUT PKG_PUB_UTILS.REFCURSOR,7.AN_I_PRICE IN NUMBER8.)9.IS10.BEGIN11.AN_O_RET_CODE := 0;12.AC_O_RET_MSG := '操作成功';13.14.OPEN CUR_RET FOR15.SELECT * FROM STOCK_PRICES WHERE PRICE<AN_I_PRICE;16.EXCEPTION17.WHEN OTHERS THEN18.AN_O_RET_CODE := -1;19.AC_O_RET_MSG := '错误代码:' || SQLCODE || CHR(13) || '错误信息:' || SQLERRM;20.END P_GET_PRICE;5.创建函数:[cpp]view plaincopyprint?1.--创建函数:F_GET_PRICE2.CREATE OR REPLACE FUNCTION F_GET_PRICE(v_price IN NUMBER)3.RETURN PKG_PUB_UTILS.REFCURSOR4.AS5.stock_cursor PKG_PUB_UTILS.REFCURSOR;6.BEGIN7.OPEN stock_cursor FOR8.SELECT * FROM stock_prices WHERE price < v_price;9.RETURN stock_cursor;10.END;6.JAVA调用存储过程返回结果集JDBCoracle10G_INVOKEPROCEDURE.java[java]view plaincopyprint?1.import java.sql.*;2.import oracle.jdbc.OracleCallableStatement;3.import oracle.jdbc.OracleTypes;4.5./* 本例是通过调用oracle的存储过程来返回结果集:6.* oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip7.*/8.public class JDBCoracle10G_INVOKEPROCEDURE {9.Connection conn = null;10.Statement statement = null;11.ResultSet rs = null;12.CallableStatement stmt = null;13.14.String driver;15.String url;16.String user;17.String pwd;18.String sql;19.String in_price;20.21.public JDBCoracle10G_INVOKEPROCEDURE()22.{23.driver = "oracle.jdbc.driver.OracleDriver";24.url = "jdbc:oracle:thin:@localhost:1521:ORCL";25.// oracle 用户er = "test";27.// oracle 密码28.pwd = "test";29.init();30.// mysid:必须为要连接机器的sid名称,否则会包以下错:31.// java.sql.SQLException: Io 异常: Connection32.//refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERRO R=(CODE=12505)(EMFI=4))))33.// 参考连接方式:34.// Class.forName( "oracle.jdbc.driver.OracleDriver" );35.// cn = DriverManager.getConnection(36.// "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );37.38.}39.40.public void init() {41.System.out.println("oracle jdbc test");42.try {43.Class.forName(driver);44.System.out.println("driver is ok");45.conn = DriverManager.getConnection(url, user, pwd);46.System.out.println("conection is ok");47.statement = conn.createStatement();48.// conn.setAutoCommit(false);49.// 输入参数50.in_price = "3.0";51.// 调用函数52.stmt = conn.prepareCall("call P_GET_PRICE(?,?,?,?)");53.stmt.registerOutParameter(1, java.sql.Types.FLOAT);54.stmt.registerOutParameter(2, java.sql.Types.CHAR);55.stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);56.stmt.setString(4, in_price);57.stmt.executeUpdate();58.int retCode = stmt.getInt(1);59.String retMsg = stmt.getString(2);60.if (retCode == -1) { // 如果出错时,返回错误信息61.System.out.println("报错!");62.} else {63.// 取的结果集的方式一:64.rs = ((OracleCallableStatement) stmt).getCursor(3);65.// 取的结果集的方式二:66.// rs = (ResultSet) stmt.getObject(3);67.String ric;68.String price;69.String updated;70.// 对结果进行输出71.while (rs.next()) {72.ric = rs.getString(1);73.price = rs.getString(2);74.updated = rs.getString(3);75.System.out.println("ric:" + ric + ";-- price:" + price76.+ "; --" + updated + "; ");77.}78.}79.80.} catch (Exception e) {81.e.printStackTrace();82.} finally {83.System.out.println("close ");84.}85.}86.87.public static void main(String args[])// 自己替换[]88.{89.new JDBCoracle10G_INVOKEPROCEDURE();90.}91.}7.开发JAVA调用函数返回结果集JDBCoracle10G_INVOKEFUNCTION.java[java]view plaincopyprint?1.import java.sql.*;2.import oracle.jdbc.OracleCallableStatement;3.import oracle.jdbc.OracleTypes;4.5./*6./* 本例是通过调用oracle的函数来返回结果集:7.* oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip8.*/9.public class JDBCoracle10G_INVOKEFUNCTION {10.Connection conn = null;11.Statement statement = null;12.ResultSet rs = null;13.CallableStatement stmt = null;14.15.String driver;16.String url;17.String user;18.String pwd;19.String sql;20.String in_price;21.22.public JDBCoracle10G_INVOKEFUNCTION()23.{24.driver = "oracle.jdbc.driver.OracleDriver";25.url = "jdbc:oracle:thin:@localhost:1521:ORCL";26.// oracle 用户er = "test";28.// oracle 密码29.pwd = "test";30.init();31.// mysid:必须为要连接机器的sid名称,否则会包以下错:32.// java.sql.SQLException: Io 异常: Connection33.//refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERRO R=(CODE=12505)(EMFI=4))))34.// 参考连接方式:35.// Class.forName( "oracle.jdbc.driver.OracleDriver" );36.// cn = DriverManager.getConnection(37.// "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );38.}39.40.public void init() {41.System.out.println("oracle jdbc test");42.try {43.Class.forName(driver);44.System.out.println("driver is ok");45.conn = DriverManager.getConnection(url, user, pwd);46.System.out.println("conection is ok");47.statement = conn.createStatement();48.// conn.setAutoCommit(false);49.// 输入参数50.in_price = "5.0";51.// 调用函数52.stmt = conn.prepareCall("{? = call F_GET_PRICE(?)}");53.// stmt.registerOutParameter(1, java.sql.Types.FLOAT);54.// stmt.registerOutParameter(2, java.sql.Types.CHAR);55.stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);56.stmt.setString(2, in_price);57.stmt.executeUpdate();58.// 取的结果集的方式一:59.rs = ((OracleCallableStatement) stmt).getCursor(1);60.// 取的结果集的方式二:61.// rs = (ResultSet) stmt.getObject(1);62.String ric;63.String price;64.String updated;65.66.while (rs.next()) {67.ric = rs.getString(1);68.price = rs.getString(2);69.updated = rs.getString(3);70.System.out.println("ric:" + ric + ";-- price:" + price + "; --"71.+ updated + "; ");72.}73.74.} catch (Exception e) {75.e.printStackTrace();76.} finally {77.System.out.println("close ");78.}79.}80.81.public static void main(String args[])// 自己替换[]82.{83.new JDBCoracle10G_INVOKEFUNCTION();84.}85.}。

用java调用oracle存储过程总结

用java调用oracle存储过程总结

用java‎调用ora‎cle存储‎过程总结分类:PL/SQL系列‎2009-09-24 15:08 253人阅‎读评论(0) 收藏举报声明:以下的例子‎不一定正确‎,只是为了演‎示大概的流‎程。

一:无返回值的‎存储过程存储过程为‎:CREAT‎E OR REPLA‎C E PROCE‎D URE TESTA‎(PARA1‎IN VARCH‎A R2,PARA2‎IN VARCH‎A R2) ASBEGIN‎INSER‎T INTO HYQ.B_ID (I_ID,I_NAM‎E) VALUE‎S (PARA1‎, PARA2‎);END TESTA‎;然后呢,在java‎里调用时就‎用下面的代‎码:packa‎g e com.hyq.src;impor‎t java.sql.*;impor‎t java.sql.Resul‎t Set;publi‎c class‎TestP‎r oced‎u reOn‎e {publi‎c TestP‎r oced‎u reOn‎e() {}publi‎c stati‎c void main(Strin‎g[] args ){Strin‎g drive‎r = "oracl‎e.jdbc.drive‎r.Oracl‎e Driv‎e r";Strin‎g strUr‎l = "jdbc:oracl‎e:thin:@127.0.0.1:1521: hyq ";State‎m ent stmt = null;Resul‎t Set rs = null;Conne‎c tion‎conn = null;Calla‎b leSt‎a teme‎n t cstmt‎= null;try {Class‎.forNa‎m e(drive‎r);conn = Drive‎r Mana‎g er.getCo‎n nect‎i on(strUr‎l, " hyq ", " hyq ");Calla‎b leSt‎a teme‎n t proc = null;proc = conn.prepa‎r eCal‎l("{ call HYQ.TESTA‎(?,?) }");proc.setSt‎r ing(1, "100");proc.setSt‎r ing(2, "TestO‎n e");proc.execu‎t e();}catch‎(SQLEx‎c epti‎o n ex2) {ex2.print‎S tack‎T race‎();}catch‎(Excep‎t ion ex2) {ex2.print‎S tack‎T race‎();}final‎l y{try {if(rs != null){rs.close‎();if(stmt!=null){stmt.close‎();}if(conn!=null){conn.close‎();}}}catch‎(SQLEx‎c epti‎o n ex1) {}}}}二:有返回值的‎存储过程(非列表)当然了,这就先要求‎要建张表T‎ESTTB‎,里面两个字‎段(I_ID,I_NAM‎E)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何在Oracle中使用Java存储过程(详解)一、如何缔造java存储过程?通常有三种步骤来缔造java存储过程。

1. 使用oracle的sql语句来缔造:e.g. 使用create or replace and compile java source named "" as后边跟上java源程序。

要求类的步骤必须是public static的,威力用于存储过程。

1.SQL> create or replace and compile java source named "javademo1"2. as3. import java.sql.*;4. public class JavaDemo15. {6. public static void main(String[] argv)7. {8. System.out.println("hello, java demo1");9. }10. }11. /12.13.Java 已14.15.缔造。

16.17.SQL> show errors java source "javademo1"18.没有19.20.舛误。

21.22.SQL> create or replace procedure javademo123. 2 as24.3 language java name JavaDemo1.main(ng.String[]);25. 4 /26.27.过程已28.30.31.SQL> set serveroutput on32.SQL> call javademo1();33.34.调用35.实现。

36.37.SQL> call dbms_java.set_output(5000);38.39.调用40.实现。

41.42.SQL> call javademo1();43.hello, java demo144.45.调用46.实现。

47.48.SQL> call javademo1();49.hello, java demo150.调用51.实现。

2. 使用外部class文件来装载缔造e.g. 这里既然用到了外部文件,必定要将class文件放到oracle Server 的某一目录下边。

1.public class OracleJavaProc2.{3. public static void main(String[] argv)4. {5. System.out.println("Its a Java Oracle procedure.");6. }7.}8.9.10.SQL> grant create any directory to scott;11.12.授权13.顺利。

14.15.SQL> conn scott/tiger@iihero.oracledb17.SQL> create or replace directory test_dir as d:/oracle;18.19.目录已20.21.缔造。

22.23.SQL> create or replace java class using bfile(test_dir, OracleJavaProc.CLASS)24. 2 /25.26.Java 已27.28.缔造。

29.30.SQL> create or replace procedure testjavaproc as language javaname OracleJavaProc.main(ng.String[]);31. 2 /32.33.过程已34.35.缔造。

36.37.SQL> call testjavaproc();38.39.调用40.实现。

41.42.SQL> execute testjavaproc;43.44.PL/SQL 过程已45.顺利46.实现。

47.48.SQL> set serveroutput on size 500049.SQL> call dbms_java.set_output(5000);50.51.调用52.实现。

53.54.SQL> execute testjavaproc;55.Its a Java Oracle procedure.3. 我推举的一种步骤,直接使用loadjava命令远程装载并缔造。

先缔造一个类, e.g.1.import java.sql.*;2.import oracle.jdbc.*;3.4.public class OracleJavaProc {5.6. //Add a salgrade to the database.7. public static void addSalGrade(int grade, int losal, int hisal) {8.9. System.out.println("Creating new salgrade for EMPLOYEE...");10.11. try {12. Connection conn =13. DriverManager.getConnection("jdbc:default:connection:");14.15. String sql =16. "INSERT INTO salgrade " +17. "(GRADE,LOSAL,HISAL) " +18. "VALUES(?,?,?)";19. PreparedStatement pstmt = conn.prepareStatement(sql);20. pstmt.setInt(1,grade);21. pstmt.setInt(2,losal);22. pstmt.setInt(3,hisal);23. pstmt.executeUpdate();24. pstmt.close();25. }26. catch(SQLException e) {27. System.err.println("ERROR! Adding Salgrade: "28. + e.getMessage());29. }30. }31.}使用loadjava命令将其装载到服务器端并编译:1.D:eclipse3.1workspacedbtest>loadjava -u scott/tiger@iihero.oracledb -v -resolve Or2.acleJavaProc.java3.arguments: -u scott/tiger@iihero.oracledb -v -resolve OracleJavaProc.java4.creating : source OracleJavaProc5.loading : source OracleJavaProc6.resolving: source OracleJavaProc查问一下状态:1.衔接到:2.Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production3.With the Partitioning, OLAP and Oracle Data Mining options4.JServer Release 9.2.0.1.0 - Production5.SQL> SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE JAVA%;6.7.OBJECT_NAME8.--------------------------------------------------------------------------------9.10.OBJECT_TYPE STATUS11.--------------------------------------------------12.OracleJavaProc13.JAVA CLASS VALID14.15.OracleJavaProc16.JAVA SOURCE VALID测试一下存储过程:1.SQL> create or replace procedure add_salgrade(id number, losalnumber, hisal num2.ber) as language java name OracleJavaProc.addSalGrade(int, int,int);3. 2 /4.5.过程已6.7.缔造。

8.9.SQL> set serveroutput on size 200010.SQL> call dbms_java.set_output(2000);11.12.调用13.实现。

14.15.SQL> execute add_salgrade(6, 10000, 15000);16.Creating new salgrade for EMPLOYEE...17.18.PL/SQL 过程已19.顺利20.实现。

21.22.SQL> select * from salgrade where grade=6;23.24. GRADE LOSAL HISAL25.---------- ---------- ----------26. 6 10000 15000二、如何更新你已经编写的java存储过程?如果要往类OracleJavaProc里增加一个存储过程步骤,如何开辟?准确的步骤应该是先dropjava, 改程序,再loadjava 。

e.g. 批改OracleJavaProc类内容如下:1.import java.sql.*;2.import oracle.jdbc.*;3.4.public class OracleJavaProc {5.6. // Add a salgrade to the database.7. public static void addSalGrade(int grade, int losal, int hisal) {8.9. System.out.println("Creating new salgrade for EMPLOYEE...");10.11. try {12. Connection conn =13. DriverManager.getConnection("jdbc:default:connection:");14.15. String sql =16. "INSERT INTO salgrade " +17. "(GRADE,LOSAL,HISAL) " +18. "VALUES(?,?,?)";19. PreparedStatement pstmt = conn.prepareStatement(sql);20. pstmt.setInt(1,grade);21. pstmt.setInt(2,losal);22. pstmt.setInt(3,hisal);23. pstmt.executeUpdate();24. pstmt.close();25. }26. catch(SQLException e) {27. System.err.println("ERROR! Adding Salgrade: "28. + e.getMessage());29. }30. }31.32. public static int getHiSal(int grade)33. {34. try {35. Connection conn =36. DriverManager.getConnection("jdbc:default:connection:");37. String sql = "SELECT hisal FROM salgrade WHERE grade =?";38. PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, grade);39. ResultSet rset = pstmt.executeQuery();40. int res = 0;41. if (rset.next())42. {43. res = rset.getInt(1);44. }45. rset.close();46. return res;47. }48. catch (SQLException e)49. {50. System.err.println("ERROR! Querying Salgrade: "51. + e.getMessage());52. return -1;53. }54. }55.56.}如何更新呢?1.D:eclipse3.1workspacedbtest>dropjava -u scott -v OracleJavaProc2.3.D:/tiger@iihero.oracledbeclipse3.1workspacedbtest>loadjava -u scott -v -resolve Or4.acleJavaProc/tiger@iihero.oracledb.java5.arguments: -u scott/tiger@iihero.oracledb -v -resolve OracleJavaProc.java6.creating : source OracleJavaProc7.loading : source OracleJavaProc8.resolving: source OracleJavaProc后边的利用示例:1.SQL> create or replace function query_hisal(grade number) return number as langu2.age java name OracleJavaProc.getHiSal(int) return int;3. 2 /4.5.函数已6.7.缔造。

相关文档
最新文档