下面的文章主要描述的是如何用Oracle Java的存储过程来访问异构数据库的实际操作,其中包括硬件及操作系统,以及数据库环境等相关内容的介绍。

以下的文章首要介绍的是怎么用Oracle Java的存储进程来拜访异构数据库的实践操作,咱们都知道在一般的企业实践运用中,Oracle数据库的类型或许会有多种,这些异构数据库之间的互连往往成为某个运用的瓶颈。

Oracle Java存储进程拜访异构数据库的计划  Java 第1张

处理的办法有多种,一是透过运用程序作为桥梁,在异构数据库之间穿针引线;二是数据库厂商供给的处理方案,比方SQL Server的Link Server, Oracle的Transparent Gateway技能;三是 经过数据库的运用扩展接口,例如Oracle的PL/SQL答应透过Java扩展拜访外部数据库。

本文着眼于第三点,以Oracle衔接SQL Server为例,讨论怎么运用Java编写PL/SQL拜访SQL Server,这点关于那些需求在非WINDOWS平台下拜访SQL Server的Oracle运用特别有意义。

本文中系统装备如下。

一、硬件及操作系统

Dell Intel Xeon Server + Windows2000 Server

二、数据库环境

Oracle 8.1.7

三、装置

欲使Oracle支撑Java,必须在Oracle上装置Jserver组件。在装置Oracle软件的时分,假如挑选典型装置,Jserver是默许装置的,假如挑选自定义装置,记住挑选Jserver组件。还有另一种办法能够手艺装置Jserver.办法是:

进入Oracle装置目录下的\Javavm\install目录,以sys用户的身份履行initjvm.sql,这个脚本会为数据库装备一个Java运转环境,一起会把根本的java类库装载到数据库中去。主张在履行此脚本之前,先阅览\javavm\readme.txt文件,里边包含装置前对数据库某些装备的必要修正的阐明,以及对脚本履行犯错的处理描绘。

脚本履行时间大约10分钟,假如失利能够从头履行。

在脚本履行结束后,用DBA Studio东西能够看到多了Jserver这个东西。

四、权限赋予

要能在Oracle中履行Java存储进程,需求一个javauserpriv的人物,这个人物在装置Jserver后会主动创立,将此人物赋给各个Oracle的运用账号。

五、编写Oracle Java存储进程

1、 在本地机器上编写一个Java类。

  1. publicclassTEST
  2. {
  3. publicstaticvoidmain(Stringargs[])
  4. {
  5. System.out.println("HELLOTHISiSAJAVAPROCEDURE");
  6. }
  7. }
  8. <?xml:namespaceprefix=ons="urn:schemas-microsoft-com:office:office"/>

2、 用loadjava指令将写好的java类文件上传到数据库中。

例如:C:\>loadjava –u test/Oracle@mytest -o –v –r d:\TEST.java

当然,除了上载.java文件,也能够上载.class/.jar/.properties文件,上载后的文件在数据库中会以Object的方法存在.

文件若有改动,能够从头上载,会将曾经的版别覆盖掉。

3、 生成声明接口

上载的java类需求发布成一个可供调用的接口,这些接口能够是Store Procesure/Trrigger/Function 等。

  1. SQL>createorreplaceproceduretest_java
  2. aslanguagejava
  3. name'TEST.main(java.lang.String[])';
  4. /

4、 测验

  1. SQL>setserveroutputonsize5000
  2. SQL>calldbms_java.set_output(5000);

调用完结。

  1. SQL>executetest_java;
  2. HELLOTHISiSAJAVAPROCEDURE

PL/SQL 进程已成功完结。

  1. SQL>calltest_java();
  2. HELLOTHISiSAJAVAPROCEDURE

调用完结。

5、 以上是一个简略的java 类,其实假如要在Oracle中拜访到非Oracle的数据库,只

要在java 类中完成拜访非Oracle数据库就能够了。

  1. publicstaticStringgetStringFomSql(){
  2. StringstrResult="";
  3. Connectionconn=null;
  4. Statementstmt=null;
  5. ResultSetrs=null;
  6. try{
  7. Class.forName("com.inet.tds.TdsDriver").newInstance();
  8. Stringurl="jdbc:inetdae7:10.24.09.192:1433?database=pubs";

pubs为你的数据库的

  1. Stringuser="sa";
  2. Stringpassword="123";
  3. conn=DriverManager.getConnection(url,user,password);
  4. Stringsql="selecttop1dtype,dnamefromtest";
  5. stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  6. rs=stmt.executeQuery(sql);
  7. if(rs.next()){
  8. strResult="Theresultfromsqlserveris:dtype->"+rs.getString("dtype")+"dname->"+rs.getString("dname");
  9. }
  10. }catch(InstantiationExceptione){
  11. TODOAuto-generatedcatchblock
  12. e.printStackTrace();
  13. strResult="operatorfailinInstantiationException";
  14. }catch(IllegalAccessExceptione){
  15. TODOAuto-generatedcatchblock
  16. e.printStackTrace();
  17. strResult="operatorfailinIllegalAccessException";
  18. }catch(ClassNotFoundExceptione){
  19. TODOAuto-generatedcatchblock
  20. e.printStackTrace();
  21. strResult="operatorfailinClassNotFoundException";
  22. }catch(SQLExceptione){
  23. TODOAuto-generatedcatchblock
  24. e.printStackTrace();
  25. strResult="operatorfailinSQLException";
  26. }
  27. finally{
  28. try{
  29. rs.close();
  30. conn.close();
  31. }catch(SQLExceptione1){
  32. e1.printStackTrace();
  33. }
  34. }
  35. returnstrResult;
  36. }


值得注意的一点是,经过java存储拜访SQL Server,假如回来一个成果集,在9i以下的Oracle版别是没有对应的数据类型能够转化的,一个能够变通的办法是要么回来一个字符串,要么将回来的成果集存放到Oracle中的表里。这样做是为了便利那些非Windows平台下无法直接拜访SQL Server的程序。

六、外部程序调用Oracle java存储进程

调用java存储进程的办法跟调用一般的Oracle Java存储进程的办法是相同的.

【修改引荐】

  1. Oracle11g认证考试的3个首要途径
  2. Oracle数据库中3种常用的封闭方法
  3. Oracle数据库中常常运用的发动方法介绍
  4. 用触发器完成Oracle操作日志
  5. Oracle数据库堪称是重量级的缘由
转载请说明出处
知优网 » Oracle Java存储进程拜访异构数据库的计划

发表评论

您需要后才能发表评论