六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 100|回复: 0

用Java编写Oracle存储过程

[复制链接]

升级  70%

7

主题

7

主题

7

主题

童生

Rank: 1

积分
35
 楼主| 发表于 2013-1-13 19:01:17 | 显示全部楼层 |阅读模式
<!----><!----> 
<!----> 
1 介绍

Oracle里可以使用多种语言来编写存储过程,比如Pro*C/C++,PL/SQL,COBOL,在Oracle8i开始支持用Java编写存储过程。
 
如果非要写存储过程的话,做为以Java谋生的我,首选用Java编写,用PL/SQL需要记忆很多的语法(Pascal类的语法)和函数,远不如使用Java/JDBC这么轻车熟路。而且,DB2等数据库都支持Java存储过程,所以不比为每一种数据学习一种编写存储过程的方法了。
 
Java存储过程与一般的JDBC程序有所不同的是:
1.有安全限制,毕竟是在oracle内部运行的,不允许访问操作系统的资源,如文件。
2.获取数据库联接方式,connection = new OracleDriver().defaultConnection();
3.System.out,System.err,System.in等输入输出有所不同。可以利用某些命令重定向。
 
2 例子

下面用Java 存储过程写一个例子。

2.1 JavaSource

在plsqldeveloper里,java source里增加一个TestJava类,

Java代码

create or replace and compilejava source named TestJava as

public class TestJava {

 

    public static void test(String xm) {

       System.out.println("姓名:"+xm);

    }

   

    public static String message(String xm) {

       return "Hello," + xm;

    }

 

}

create or replace and compilejava source named TestJava1 as

public class TestJava1

{

  public static void test()

  {

   System.out.println("Hello");

  }

}

执行它,以保存并编译。

2.2 Procedure

1.TestPro

create or replace procedure TestPro(xm in varchar2) as language java name 'TestJava.test(java.lang.String)';

create or replace proceduretestJava1 as language java name 'TestJava1.test()';

 

2.在command window里输入
SET SERVEROUTPUT ON;
CALL dbms_java.set_output(2000);  
以使System.out重定向到当前窗口;
在commandwindow里输入,exec testpro(‘111’);
即可看到结果:
 姓名:111
PL/SQL procedure successfully completed
 
 
2.3 Function
1.TestFuc
create or replace function TestFuc(xm in varchar2) return VARCHAR2 as language java name 'TestJava.message(java.lang.String) returnjava.lang.String';
 
2.调用
Select testfuc(‘娃哈哈’) from dual;
显示结果:
Hello,娃哈哈
 
3 OracleSocket通信

3.1 授权

--授权,用户必须大写
exec dbms_java.grant_permission('TEST','SYS:java.util.PropertyPermission','*', 'read,write' );
exec dbms_java.grant_permission('TEST','SYS:java.net.SocketPermission','*','connect,resolve');
 
3.2 数据库连接

/**

     * 数据库连接(默认)

     * @return Connection

     * @throws SQLException

     */

    public static Connection getConnection() throws SQLException {

       Connection con = null;

       con = new OracleDriver().defaultConnection();

 

       return con;

    }

 

    /**

     * 数据库连接

     * @param driverClassName

     * @param url

     * @param user

     * @param password

     * @return Connection

     * @throws ClassNotFoundException

     * @throws SQLException

     */

    public static Connection getConnection(String driverClassName, Stringurl, String user, String password) throws ClassNotFoundException, SQLException {

       Connection con = null;

       Class.forName(driverClassName);

       Properties info = System.getProperties();

       info.put("user", user);

       info.put("password", password);

       con = DriverManager.getConnection(url,info);

 

       return con;

    }
4 参考资料

Oracle® Database Java Developer'sGuide
http://download-west.oracle.com/docs/cd/B19306_01/java.102/b14187/toc.htm
 
Sample:
http://www.oracle.com/technology/sample_code/tech/java/jsp/oracle9ijsp.html
 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表