下面的文章主要描述的是如何用Oracle Java的存储过程来访问异构数据库的实际操作,其中包括硬件及操作系统,以及数据库环境等相关内容的介绍。
以下的文章首要介绍的是怎么用Oracle Java的存储进程来拜访异构数据库的实践操作,咱们都知道在一般的企业实践运用中,Oracle数据库的类型或许会有多种,这些异构数据库之间的互连往往成为某个运用的瓶颈。
处理的办法有多种,一是透过运用程序作为桥梁,在异构数据库之间穿针引线;二是数据库厂商供给的处理方案,比方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类。
- publicclassTEST
- {
- publicstaticvoidmain(Stringargs[])
- {
- System.out.println("HELLOTHISiSAJAVAPROCEDURE");
- }
- }
- <?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 等。
- SQL>createorreplaceproceduretest_java
- aslanguagejava
- name'TEST.main(java.lang.String[])';
- /
4、 测验
- SQL>setserveroutputonsize5000
- SQL>calldbms_java.set_output(5000);
调用完结。
- SQL>executetest_java;
- HELLOTHISiSAJAVAPROCEDURE
PL/SQL 进程已成功完结。
- SQL>calltest_java();
- HELLOTHISiSAJAVAPROCEDURE
调用完结。
5、 以上是一个简略的java 类,其实假如要在Oracle中拜访到非Oracle的数据库,只
要在java 类中完成拜访非Oracle数据库就能够了。
- publicstaticStringgetStringFomSql(){
- StringstrResult="";
- Connectionconn=null;
- Statementstmt=null;
- ResultSetrs=null;
- try{
- Class.forName("com.inet.tds.TdsDriver").newInstance();
- Stringurl="jdbc:inetdae7:10.24.09.192:1433?database=pubs";
pubs为你的数据库的
- Stringuser="sa";
- Stringpassword="123";
- conn=DriverManager.getConnection(url,user,password);
- Stringsql="selecttop1dtype,dnamefromtest";
- stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
- rs=stmt.executeQuery(sql);
- if(rs.next()){
- strResult="Theresultfromsqlserveris:dtype->"+rs.getString("dtype")+"dname->"+rs.getString("dname");
- }
- }catch(InstantiationExceptione){
- TODOAuto-generatedcatchblock
- e.printStackTrace();
- strResult="operatorfailinInstantiationException";
- }catch(IllegalAccessExceptione){
- TODOAuto-generatedcatchblock
- e.printStackTrace();
- strResult="operatorfailinIllegalAccessException";
- }catch(ClassNotFoundExceptione){
- TODOAuto-generatedcatchblock
- e.printStackTrace();
- strResult="operatorfailinClassNotFoundException";
- }catch(SQLExceptione){
- TODOAuto-generatedcatchblock
- e.printStackTrace();
- strResult="operatorfailinSQLException";
- }
- finally{
- try{
- rs.close();
- conn.close();
- }catch(SQLExceptione1){
- e1.printStackTrace();
- }
- }
- returnstrResult;
- }
值得注意的一点是,经过java存储拜访SQL Server,假如回来一个成果集,在9i以下的Oracle版别是没有对应的数据类型能够转化的,一个能够变通的办法是要么回来一个字符串,要么将回来的成果集存放到Oracle中的表里。这样做是为了便利那些非Windows平台下无法直接拜访SQL Server的程序。
六、外部程序调用Oracle java存储进程
调用java存储进程的办法跟调用一般的Oracle Java存储进程的办法是相同的.
【修改引荐】
- Oracle11g认证考试的3个首要途径
- Oracle数据库中3种常用的封闭方法
- Oracle数据库中常常运用的发动方法介绍
- 用触发器完成Oracle操作日志
- Oracle数据库堪称是重量级的缘由
知优网 » Oracle Java存储进程拜访异构数据库的计划