在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.实现。

oracle调用JAVA类的方法

oracle调用JAVA类的方法

oracle调⽤JAVA类的⽅法导⼊jar包在oracle中导⼊需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle⾥⾯写简单的调⽤就可以了, 1、操作系统需要拥有⽀持loadjava命令的jdk。

 2、加载jlha.jar包,到oracle数据库中。

操作过程:在dos环境下,输⼊命令: loadjava -r -f -o -user usscares/usscares@usscares jlha.jar注意:jar包要在1.4的环境下编译,项⽬右键 properties java compiler compoler compliance level 1.4 即可否则报version 49 类似的错误调⽤JAVA类oracle调⽤JAVA类的⽅法主要有以下三种:1. ⽤loadjava⽅法装载;可能是调试⽅便,据说这种⽅法⽐较通⽤。

c:\test\hello.javaJava Code1 2 3 4 5 6 7 8 9 10 11 12 13 14 15public class hello{public static void main(String[] args){System.out.println("Hello");hello h = new hello();h.insertM(9);}public static void insertM(int pid){System.out.println("This is the method insertM."); }}C:\test>loadjava -u -v -resolve hello.javaSQL> create procedure prc_hehe as language java name 'hello.main(ng.String[])过程已创建。

SQL> call prc_hehe();调⽤完成。

java 连oracle方法

java 连oracle方法

java 连oracle方法在Java中连接Oracle数据库通常使用JDBC(Java Database Connectivity)来实现。

首先,你需要确保已经安装了Oracle数据库,并且已经设置了数据库的连接信息,包括主机名、端口号、数据库名称、用户名和密码。

接下来,你需要下载并安装Oracle提供的JDBC驱动程序,然后在Java程序中引入该驱动程序。

在Java代码中,你可以使用以下步骤来连接Oracle数据库:1. 加载并注册JDBC驱动程序,使用Class.forName()方法加载并注册Oracle JDBC驱动程序,例如,Class.forName("oracle.jdbc.driver.OracleDriver")。

2. 建立数据库连接,使用DriverManager.getConnection()方法建立与Oracle数据库的连接,传入数据库连接URL、用户名和密码,例如,Connection connection =DriverManager.getConnection("jdbc:oracle:thin:@localhost:15 21:ORCL", "username", "password")。

3. 执行SQL查询或更新,一旦建立了数据库连接,你就可以使用Connection对象创建Statement或PreparedStatement来执行SQL查询或更新操作,例如,Statement statement = connection.createStatement()。

4. 处理查询结果,如果你执行了查询操作,可以使用ResultSet对象来处理查询结果,例如,ResultSet resultSet = statement.executeQuery("SELECT FROM table")。

Oracle集合类型输出参数的PLSQL存储过程及其Java调用

Oracle集合类型输出参数的PLSQL存储过程及其Java调用

Oracle集合类型输出参数的PL/SQL存储过程及其Java调用- -有段时间为了用存储过程做统计报表,写了这文章。

现在的java的数据库-关系映射技术似乎不提倡用存储过程,其实存储过程更能发挥数据库的效率。

1 引言存储过程因其执行效率高、与事务处理的结合、运行更安全等优点,在数据库应用程序中被广泛采用。

PL/SQL是用于从各种环境中访问Oracle数据库的一种编程语言,它与数据库服务器集成在一起,PL/SQL编写的存储过程编译效率高,网络系统开销小,同时PL/SQL直观性好,是大多数人的选择。

以Number、Varchar等基本标量类型为输出参数的PL/SQL存储过程,每个输出参数只能返回一个对应值。

而在实际数据库应用程序中,尤其是在进行系统综合查询统计时,往往需要返回二维数组或结果集,这时应考虑在存储过程中使用集合这种数据结构。

对于集合,我们可以一次把许多元素作为一个整体进行操作,也可以对集合中的单个元素进行操作,使用方便、灵活。

2 PL/SQL存储过程及Java程序的编写2.1 索引表作为输出参数索引表是无约束的,其大小的唯一限制(除可用内存外)就是它的关键字BINARY_INTEGER类型所能表示数值的约束(-2147483647...+2147483647),其元素不需要按任何特定顺序排列。

在声明时,我们不需要指定其大小,而且对索引表的元素可以直接赋值,不用初始化,可见使用索引表极其方便。

2.1.1存储过程的编写我们可以在PL/SQL语句块中定义索引表,但作为输出参数的索引表,必须要在包(package)里定义,方法如下:create or replace package out_param is---- 定义了元素是varchar2类型的一个索引表类型type out_index_table_typ is table of varchar2(50) index by binary_integer;end out_param;接下来就可以在pl/sql存储过程里引用在包里定义的索引表类型:create or replace procedure testPro1(in_param in varchar2,o_table out out_param. out_index_table_typ ) isbegin-------这里略去程序体end testPro1;其中,返回的索引表类型前必须用包名加上句点来引用out_param. out_index_table_typ 2.1.2 J ava程序的编写索引表与数据库表很形似,有key和value两列,但它不是真正的数据库表,不可以存储到数据库中。

论在Oracle中调用Java类

论在Oracle中调用Java类

论在Oracle中调用Java类一、写作目的在生产系统中,往往会有一种情况是通过Oracle存储过程来调用Java程序,已达到更优的处理结果。

现就在生产过程中遇到的问题来简介在Oracle中如何调用Java类。

二、Oracle调用Java类简介Oracle数据库的Instance是由SGA和process组成的,在SGA中有6个不同的池,分别为Large pool,Java pool, Shared pool,Redo buffer,Block buffers 和Fixed SGA 。

Java 池(Java pool)是Oracle 8.1.5版本中增加的,目的是支持在数据库中运行Java。

存储过程(stored procedure)允许将运行于数据库层中的持久性逻辑与运行于中间层中的商务逻辑有效地分离开来。

这种分离可以降低整个应用程序的复杂性,并提供其重用性、安全性、性能和可伸缩性。

但是,妨碍存储过程广泛采用的一个主要障碍是不同数据库厂商使用各种专有的、且依赖于数据库的实现语言。

使用基于Java的存储过程可以解决这一问题。

Oracle已经实现了ANSI 标准,这些标准规定了从SQL中将静态Java方法作为过程或函数进行调用的能力。

这种实现被简单地称作"Java存储过程"。

三、生产中遇到的问题在EBS生产环境中,银行给员工发工资时,在进行账户校验以及付款时,是以并发请求的形式调用Java程序,表现出运行效率极低,付一笔款需要2-3分钟,分析原因有:1、并发程序运行时,会多次调用并发管理器,会有耗时。

2、如果此时有多个并发程序在运行,也会降低程序运行效率。

3、生产环境数据量巨大,也会对付款程序运行效率有影响。

解决方案:通过以上分析,原因2和3在生产上是在所难免的,可优化的余地并不是很大,因此,我们决定直接通过oracle调用java类,越过并发程序这一步骤,减少调用并发管理器的时间,从而缩短付款流程的时间,提升付款效率。

通过oracle调用java类并加载jar包到oracle中以支持java类

通过oracle调用java类并加载jar包到oracle中以支持java类

根据鬼子要‎求,最初的单纯‎使用ora‎c le发送‎和接收ma‎i l被抛弃‎(上一篇文章‎描述了具体‎实现),转而要求使‎用orac‎l e调用j‎a va,并通过ja‎v amai‎l来实现m‎a il的相‎关处里。

这里问题就‎出现了,我编写过j‎a va,我编写过p‎l/sql,但是,从来没听说‎过使用or‎a cle来‎调用jav‎a。

同事没有一‎个作过的。

不过,后来察看了‎相关资料,才知道,这个技术还‎确实有。

于是做如下‎的相关记录‎。

我要做的第‎一个是把我‎之前编好的‎一个压缩功‎能java‎类和其需要‎的jar包‎文件加载到‎oracl‎e中,并使其能够‎被成功调用‎。

如何压缩文‎件,稍后处理。

我们先说如‎何加载ja‎va类和j‎ar包到o‎racle‎。

首先,压缩功能需‎要的环境配‎置:1、操作系统需‎要拥有支持‎l oadj‎a va命令‎的jdk。

2、加载jlh‎a.jar包,到orac‎l e数据库‎中。

操作过程:在dos环‎境下,输入命令:loadj‎a va -r -f -o -user ussca‎r es/ussca‎r es@ussca‎r es jlha.jar这个命令就‎是orac‎l e加载jlha.jar包的‎命令。

编写好需要‎的,负责压缩的‎类:Direc‎t oryz‎i p在其源文件‎头插入一行‎:creat‎e or repla‎c e and compi‎l e java sourc‎e named‎direc‎t oryz‎i p as并执行在数‎据库com‎mandwindo‎w中,则导入数据‎库。

既然已经成‎功导入类到‎oracl‎e中,那么接下来‎就是编写函‎数,使得ora‎cle能够‎调用此类中‎的代码:[SQL]view plain‎c opyprint‎?1.creat‎e or repla‎c e funct‎i on zipbl‎o b (retur‎n BLob‎BLOB,inBlo‎b BLOB,filen‎a me VARCH‎A R2) retur‎n BLOB2. as langu‎a ge java name3. ' s.cares‎.commo‎n.Direc‎t oryZ‎i p.zip(oracl‎e.sql.BLOB,oracl‎e.sql.BLOB,ng.Strin‎g) retur‎n oracl‎e.sql.BLOB ' ;4./5.<PRE>然后就可以‎编写测试程‎序,在oral‎ce控制台‎进行测试:[SQL]view plain‎c opyprint‎?1.decla‎r e2.pBlob‎blob; --原始数据3.rBlob‎blob; --压缩后的数‎据4.typro‎w uss_r‎o w;5.begin‎6.selec‎t d0030‎7. into pBlob‎8. from dewey‎.cysct‎02919. where‎d0020‎= '300'10. ;11.rBlob‎:= empty‎_blob‎();12.delet‎e from dewey‎.cysct‎0291 where‎d0010‎= 'tst';13.inser‎t into dewey‎.cysct‎0291 value‎s('tst','100',rBlob‎,'','','','');14.selec‎t d0030‎into rBlob‎from dewey‎.cysct‎0291 where‎d0010‎= 'tst'for updat‎e;15.--rBlob‎:= zipbl‎o b(rBLob‎,pBlob‎,'20080‎62519‎06.pdf');16.rBlob‎:= zipLi‎s tToB‎l ob(rBLob‎,'1,2,3,4,54'||chr(13)||chr(10)||'2,2,3,4,54','20080‎62519‎06.csv');mi‎t;18.end;19.<PRE></FONT>。

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方法,无需修改原有代码。

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

Oracle存储过程和java调用

Oracle存储过程和java调用

1 存储过程介绍存储过程是指用于特定操作的pl/sql块,是由流控制和sql语句书写的过程。

存储过程经编译和sql优化后存储在数据库服务器中,使用时候只需要调用即可。

2 存储过程的优点1 使用存储过程,可以实现存储过程设计和编码工作分开进行,只要将存储过程名,参数,以及返回信息告诉编码人员即可。

2 使用存储过程可以减少sql注入式攻击,提供系统的安全性。

3 执行存储过程的用户要具有一定的权限才能使用存储过程。

没有数据操作权限的用户只能在系统控制下间接的存取数据。

4 存储过程的代码直接放在了数据库中,一般由客户端直接通过存储过程的名称来进行调用,简化客户端的操作逻辑。

3 存储过程的语法存储过程包含三部分声明,执行部分,异常。

可以有无参数的或带参数的存储过程。

存储过程的定义:Create [or replace] procedure procedure_name[(parameter1[mode] datatype1,parameter2 [model] datatype2…)]IS[As]BeginPl/sql block;End [procedure_name]其中: procedure_name是存储过程的名字,parameter用于指定参数,model用于指定参数模式,datatype用于指定参数类型, IS [AS]用于开始PL/SQL代码块。

注:1,当定义存储过程的参数时,只能指定数据类型,不能指定数据长度。

2,建立存储过程时,既可以指定存储过程的参数,也可以不提供任何参数。

3,存储过程的参数主要有三种类型:输入参数(IN)、输出参数(OUT)、输入输出参数(IN OUT),其中IN用于接收调用环境的输入参数,OUT用于将输出数据传递到调用环境,IN OUT不仅要接收数据,而且要输出数据到调用环境。

4 一个简单的存储过程+调试写一个存储过程--修改其中的数据select count(*) from table1 where name='weiguo' 的查询结果是 count(*)=0如果涉及到两个或以上的输入参数,如下图:5 存储过程和java程序的接口操作5.1 无返回值的存储过程查询数据库-显示5.2 有返回值的存储过程(非列表-单个出参)注意,这里的proc.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。

JAVA连接ORACLE数据库

JAVA连接ORACLE数据库

JAVA連接ORACLE數據庫连接Oracle数据库的各种oracle JDBC驱动程序的细节。

这些细节包括:1、导入JDBC包2、注册oracle JDBC驱动程序3、打开数据库连接4、执行SQL DML语句在数据库表中获取、添加、修改和删除行一、JDBC驱动程序共有有4种1、Thin驱动程序Thin驱动程序是所有驱动程序中资源消耗最小的,而且完全用java编写的。

该驱动程序只使用TCP/IP且要求Oracle Net。

被称为第4类驱动程序。

它使用TTC协议与Oracle数据库进行通信。

能够在Applet、Application中使用。

2、OCI驱动程序OCI驱动比Thin需要资源要多,但性能通常好一点。

OCI驱动适合于部署在中间层的软件,如Web服务器。

不能在applet中使用OCI驱动。

是第2类驱动程序。

不完全用java写的,还包含了c代码。

该驱动有许多附加的性能增强特性,包括高级的连接缓冲功能。

注意:OCI驱动要求在客户计算机上安装它。

3、服务器内部驱动程序服务器内部驱动程序提供对数据库的直接访问,Oracle JVM使用它与数据库进行通信。

Oracle JVM是与数据库集成的Java Virtual Machine,可以使用Oracle J VM将Java类装载进数据库,然后公布和运行这个类中包含的方法。

4、服务器Thin驱动程序服务器端Thin驱动程序也是由Oracle JVM使用的,它提供对远程数据库的访问。

也是完全用Java编写的。

二、导入JDBC包三、注册Oracle JDBC驱动程序必须先向java程序注册Oracle JDBC驱动程序,然后才能打开数据库连接。

有两种注册Oracle JDBC驱动程序的办法。

1、使用ng.Class的forName()方法例子:Class.forName("oracle.jdbc.OracleDriver");2、使用JDBC DriverManager类的registerDriver()方法。

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);需要将存储过程名称替换为实际的存储过程名称。

TN_ORA_0001_oracle存储过程调用java程序或外部bat文件

TN_ORA_0001_oracle存储过程调用java程序或外部bat文件

oracle存储过程调用java程序或外部bat文件by 胡珏1.调用bat文件1.1.创建java sourcecreate or replace and compile java source named exesyscommand as import java.io.*;publicclass ExeSysCommand{publicstatic String ExeCmd(String cmd) {Process proc=null;int exitValue;try {System.out.println(cmd);proc = Runtime.getRuntime().exec(cmd);exitValue = proc.waitFor();if (exitValue == 0) {return"PASS";} else {return"FAIL";}} catch (Exception e) {return e.getMessage();}}publicstaticvoid P_ExeCmd(String cmd) {Process proc = null;int exitValue;try {System.out.println(cmd);proc = Runtime.getRuntime().exec(cmd);exitValue = proc.waitFor();} catch (Exception e) {System.out.println(e.getMessage());}//proc.destroy();//proc=null;}publicstaticvoid main(String[] args)1.2.创建函数或存储引用该java source1.3.授权1.4.定义bat文件1.5.执行2.调用java程序2.1.创建java sourcecreate or replace and compile java source named httprequest asimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import .URL;import .URLConnection;import .URLEncoder;import java.util.List;import java.util.Map;publicclass HttpRequest {finalstatic String username = "cluster";finalstatic String password = "cluster";finalstatic String url_encode = "UTF-8";publicstaticvoid main(String[] args) {//发送 GET 请求Strings=HttpRequest.sendGet("http://192.168.117.2:8081/kettle/executeTrans/ ", "trans=D:/KETTLE/sms.ktr&content=22");System.out.println(s);//发送 POST 请求Stringsr=HttpRequest.sendPost("http://192.168.117.2:8081/kettle/executeTran s/", "trans=D:/KETTLE/sms.ktr&content=22");System.out.println(sr);}* 向指定URL发送GET方法的请求** @param url* 发送请求的URL* @param param* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。

oracle调用java方法

oracle调用java方法

oracle调用java方法在Oracle数据库中,可以通过Java调用存储过程、函数和触发器。

以下是在Oracle数据库中调用Java方法的步骤:1. 在Oracle数据库中创建一个Java类,并将其编译为字节码文件(.class文件)。

2. 在Oracle数据库中创建一个Java源对象,将编译后的字节码文件导入到该源对象中。

例如:CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED java_class AS <Java源代码>;3. 创建Java类的包装器(wrapper):CREATE OR REPLACE FUNCTION java_method(arg1 <参数类型>, arg2 <参数类型>, ...)RETURN <返回值类型>AS LANGUAGE JAVANAME'fully_qualified_java_class_name.method_name(java_parameter_data_typ es)';其中,fully_qualified_java_class_name是完全限定的Java类名,method_name是要调用的Java方法名。

4. 调用Java方法:SELECT java_method(arg1, arg2, ...) FROM dual;其中arg1, arg2等是Java方法的参数。

注意:调用Java方法需要在Oracle数据库中创建Java虚拟机,并启用相关权限。

以上是在Oracle数据库中调用Java方法的一般步骤。

具体的步骤和语法可能会有所不同,取决于您的具体数据库版本和配置。

请参考Oracle官方文档或使用特定版本的Oracle数据库的文档进行详细了解和操作。

java连接oracle数据库的各种方法及java在数据库中的含义[1]

java连接oracle数据库的各种方法及java在数据库中的含义[1]

java连接oracle数据库的各种方法及java在数据库中的含义java与oracle的接口:在数据库中运行JAVA可以说是ORACLE8i的最令人激动的新特性。

在你创建的使用ORACLE8i 数据库的应用程序中,你可以使用与JAVA有关的新特征,轻松的将程序发布到INTERNET或INTRANET上。

Methods for Using Java in ORACLE==================================大家都知道JAVA在跨平台开发与INTERNET开发中已经比较流行,ORACLE8i及以后的版本中都包含了对在数据库中运行JAVA的扩展支持,这里有两种方法可以使用:JDBC:与ODBC类似, JDBC 提供了一个驱动接口使你可以在JAVA程序中访问数据库。

注:JDBC驱动内嵌在数据库中虚拟机中。

SQLJ:是一个JAVA预编译器,它可以将内嵌的SQL语句转化为JAVA 语句.SQLJ的使用与运行机理与其它ORACLE的与编译器(如Pro*C,Pro*COBOL)类似。

实际上,为了使我们形象的记住SQLJ提供的功能,我们也可以直接将SQLJ改名为Pro*Java。

将JAVA集成到数据库中是双向的。

也就是说你可以在JAVA中调用SQL与PL/SQL,也可以在SQL与PL/SQL中调用JAVA。

JAVA程序可以直接通过JDBC驱动调用SQL与PL/SQL,反过来,你也可以在SQL 与PL/SQL中直接调用JAVA。

在数据库中,JAVA命名空间直接映射到数据库模式的命名空间中,这样可以方便JAVA的存取与调用。

数据库同时提供扩展的DDL语句,通过这些语句,你可以象创建一个存储过程一样在数据中创建内嵌的JAVA程序。

Features of ORACLE JDBC Drivers=================================在ORACLE8i中有三种类型的JDBC驱动,他们都使用相同的 syntax, APIs, and Oracle extensions,以使JAVA代码在robust clients、Web-based Java applets, and Java stored procedures之间保持轻便灵活:三种类型如下:1.JDBC OCI:此驱动类似于传统的ODBC 驱动。

Java连接Oracle数据库常用方法

Java连接Oracle数据库常用方法

Java连接Oracle数据库常用方法在Java中连接Oracle数据库有多种方法,下面是几种常用的方法。

1. 使用JDBC连接Oracle数据库```javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class OracleConnectionpublic static void main(String[] args)Connection connection = null;try//加载JDBC驱动程序Class.forName("oracle.jdbc.OracleDriver");//创建数据库连接String username = "username";String password = "password";connection = DriverManager.getConnection(url, username, password);//在此处执行SQL语句或其他操作} catch (ClassNotFoundException e) e.printStackTrace(;} catch (SQLException e)e.printStackTrace(;} finally//关闭数据库连接tryif (connection != null) connection.close(;}} catch (SQLException e)e.printStackTrace(;}}}``````javaimport java.sql.Connection;import java.sql.SQLException;import java.util.Properties;public class OracleConnectionPoolpublic static void main(String[] args)BasicDataSource dataSource = null;Connection connection = null;try//创建连接池Properties properties = new Properties(;properties.setProperty("driverClassName", "oracle.jdbc.OracleDriver");properties.setProperty("username", "username");properties.setProperty("password", "password");dataSource =BasicDataSourceFactory.createDataSource(properties);//从连接池中获取连接connection = dataSource.getConnection(;//在此处执行SQL语句或其他操作} catch (Exception e)e.printStackTrace(;} finally//关闭连接tryif (connection != null) connection.close(;}} catch (SQLException e) e.printStackTrace(;}//关闭连接池if (dataSource != null) trydataSource.close(;} catch (SQLException e) e.printStackTrace(;}}}}```3. 使用Spring的JdbcTemplateSpring的JdbcTemplate是一个简化数据库访问的工具类,可以更方便地执行SQL语句。

Oracle调用Java方法(下)复杂Jar包封装成Oracle方法以及ORA-29521错误

Oracle调用Java方法(下)复杂Jar包封装成Oracle方法以及ORA-29521错误

Oracle调⽤Java⽅法(下)复杂Jar包封装成Oracle⽅法以及
ORA-29521错误
上⼀篇随笔中已经说了简单的Jar是如何封装的,但是我的需求是根据TIPTOP的查询条件产⽣XML⽂件并上传到FTP主机中,那么就要涉及到XML⽣成的⽅法和FTP上传的⽅法所以在Eclipse写的时候引⽤了第三⽅的价包:jdbc, org.dom4j , mons
把这⼏个jar包和⾃⼰的代码封装成⼀个jar包,结果在执⾏loadjava命令的时候总是会报⼏个ORA-29521: referenced name java/xxx/xxx/xxx could not be found 报的错是dom4j和commons找不到类。

从⽹上找到的解决⽅法也是众说纷纭,有的说这个是因为OJVM的问题,有的说是因为Jar包的问题。

有的说是因为Jar包的相关依赖包缺少导致的,但是⾃⼰试了⼀下都没有解决这个问题,
最后⽤了⼀个“⼟⽅法”解决了这个问题:因为我⽤的这个价包都是开源的,可以从官⽹上下载的到源码所以先从官⽹上下载源代码导⼊到Eclipse看⼀下发现确实这些Jar包都依赖了另外的依赖Jar包但是这些⽅法我都⽤不上所以索性直接Copy需要⽤的源码到项⽬中把⾃⼰项⽬中已经引⽤的包名都拷贝进来,然后修修改改,再把引⽤的Jar删掉。

不过jdbc的包却没有报这个错误,个⼈猜测可能是某些Jar包的Maven ⽂件导致的,如果有朋友知道为什么的话可以说下。

最后执⾏导出(Export..->Runnable JAR file->Package required libraires into generated JAR ⼀路NEXT)导出后的Jar包执⾏LoadJava命令的时候就不会报这个错了。

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语法解析一、引言1. Java与Oracle是目前在软件开发领域中使用最为广泛的两种技术。

2. Java是一种面向对象的编程语言,被广泛应用于企业级应用开发、移动应用开发等领域。

3. Oracle是一个关系型数据库管理系统,被广泛应用于数据存储、数据处理等领域。

4. 在实际的软件开发过程中,经常需要将Java程序与Oracle数据库进行交互。

5. 本文将重点介绍Java中与Oracle数据库交互时的语法解析。

二、Java连接Oracle数据库的基本步骤1. 导入相关的包在进行Java与Oracle数据库交互之前,首先需要导入相关的包。

常用的包包括java.sql包、oracle.jdbc包等。

2. 加载数据库驱动程序在使用Java连接Oracle数据库之前,需要加载相应的数据库驱动程序。

一般来说,可以通过Class.forName()方法来加载驱动程序。

3. 建立数据库连接使用DriverManager类的getConnection()方法来建立与Oracle数据库的连接。

需要提供数据库的URL、用户名和密码等连接信息。

4. 创建Statement对象一旦成功建立与Oracle数据库的连接,就可以使用Connection 对象的createStatement()方法来创建Statement对象,用于执行SQL语句。

5. 执行SQL语句通过创建的Statement对象,可以执行各种SQL语句,例如查询、更新、删除等操作。

6. 处理结果集如果执行的是查询操作,将返回一个ResultSet对象,开发者需要通过该对象来处理查询结果。

三、Java中常用的Oracle数据库操作1. 查询操作在Java程序中,可以通过Statement对象执行SELECT语句来查询数据库中的数据。

查询的结果将以ResultSet对象的形式返回,开发者需要逐行遍历ResultSet对象并处理每一行的数据。

在ORACLE中调用JAVA

在ORACLE中调用JAVA

Oracle中的Java体系结构目前,使用Java来扩展存储程序是一种很流行的方法。

在使用Java类库处理数据的过程中,PL/SQL是必不可少的一环,这是因为PL/SQL封装了Java类库的数据访问,即任何Java存储对象访问的数据都必须经过PL/SQL。

由于本章的所有内容只被最新的数据库版本所支持,因此它独立于本书的其他章节,以下是本章要介绍的内容:●Oracle中的Java体系结构●Oracle JDBC的连接类型●客户端驱动器(Client-side driver),即JDBC瘦驱动(thin driver)●Oracle调用接口驱动器,即中间层胖驱动(middle-tier thick driver)●Oracle服务器端内部驱动器(Oracle Server-Side Internal Driver),即服务器级的胖驱动●在Oracle中创建Java类库●创建内部服务器的Java函数●创建内部服务器的Java过程●创建内部服务器的Java对象●创建、装载、删除、使用Java类库时的故障诊断●映射Oracle类型本章将向您展示一张Oracle中巨大的Java组织结构图,在解释了Java的体系结构之后,您还会看到开发和扩展Java组件的方法。

使用Java扩展的原因:我们将使用PL/SQL作为存储Java类库和其他PL/SQL存储程序或匿名块程序之间的接口。

我们还会映射Oracle和Java之间的本地数据类型和用户自定义数据类型,以便能定义有效接口和支持JSP(Java Server Page,Java服务器页面)。

1Oracle中的Java体系结构Oracle9i和10g版本的数据库为开发服务器端或内部Java程序组件提供了一个健壮的体系结构。

Java组件采用OO(Object-Oriented,面向对象)的结构,这样的结构非常适合Oracle的对象-关系模型(Object-Relational model)。

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

Oracle中的Java体系结构目前,使用Java来扩展存储程序是一种很流行的方法。

在使用Java类库处理数据的过程中,PL/SQL是必不可少的一环,这是因为PL/SQL 封装了Java类库的数据访问,即任何Java存储对象访问的数据都必须经过PL/SQL。

由于本章的所有内容只被最新的数据库版本所支持,因此它独立于本书的其他章节,以下是本章要介绍的内容:●Oracle中的Java体系结构●Oracle JDBC的连接类型●客户端驱动器(Client-side driver),即JDBC瘦驱动(thin driver)●Oracle调用接口驱动器,即中间层胖驱动(middle-tier thick driver)●Oracle 服务器端内部驱动器(Oracle Server-Side Internal Driver),即服务器级的胖驱动●在Oracle中创建Java类库●创建内部服务器的Java函数●创建内部服务器的Java过程●创建内部服务器的Java对象●创建、装载、删除、使用Java类库时的故障诊断●映射Oracle类型本章将向您展示一张Oracle中巨大的Java组织结构图,在解释了Java的体系结构之后,您还会看到开发和扩展Java组件的方法。

使用Java扩展的原因:我们将使用PL/SQL作为存储Java类库和其他PL/SQL存储程序或匿名块程序之间的接口。

我们还会映射Oracle和Java之间的本地数据类型和用户自定义数据类型,以便能定义有效接口和支持JSP (Java Server Page,Java服务器页面)。

1 Oracle中的Java体系结构Oracle 9i和10g版本的数据库为开发服务器端或内部Java程序组件提供了一个健壮的体系结构。

Java组件采用OO (Object-Oriented,面向对象)的结构,这样的结构非常适合Oracle的对象-关系模型(Object-Relational model)。

组件的体系结构实际上就是一个库栈,它包含:●操作系统的平台依赖性,例如UNIX、LINUX、Microsoft Windows;●依赖Oracle数据库的文件和库管理;●独立于平台的JVM (Java Virtual Machine,Oracle Java虚拟机);●Java内核类库,兼容不同的平台;●Oracle支持的Java API (Application Programming Interfaces,应用程序接口),如SQLJ、JDBC和JNDI;●Oracle的PL/SQL存储对象,为SQL和PL/SQL程序之间提供接口,就像服务器端J ava类库一样。

Oracle和Java库就和普通的文件系统一样来存储和管理应用程序,它们屏蔽了不同操作系统的结构差异和系统限制,从而建立起一个独立于平台的存储、检索和恢复文件的统一处理过程。

同时,Java虚拟机为创建有大量文档支持的O O程序提供了一个标准环境。

另外,Oracle PL/SQL也为其他PL/SQL存储对象以及SQL访问Java库提供了软件包。

下图5-1给出了Oracle JVM(Java虚拟机)的体系结构。

Oracle JVM使用两种格式的命名空间:长名称和短名称。

长名称和Java中类的命名模式是一样的,我们可以用它本来的命名空间来调用存储Java程序。

然而,本章中Java示例的名称都是短名称,并且程序也没有放进程序包中。

当然,您完全可以将您的Java程序放进程序包中。

Java存储代码的命名空间包括了程序包的整个层次。

如果命名空间的长度超过30个字符,Oracle在数据字典视图中就使用哈希命名空间。

使用DBMS_JAVA包和LONGNAME函数可以获得完整的命名空间,而如果要获取短名称可以使用DBMS_JAVA程序包和SHORTNAME函数。

图5-1 Oracle JVM体系结构JVM具有自动内存管理的功能,这意味着我们不需要手动分配和释放内存空间。

同时,就像PL/SQL一样,Java也是强类型的语言。

因此,强类型和垃圾回收器相结合,对内存进行管理,为Java提供了一个简单的、富有弹性的环境,就像PL/SQL的运行时引擎一样。

Java和PL/SQL都是解释语言,因此它们要求JIT(Just-In-Time,即时)编译。

Oracle 9i中可以对PL/SQL和Java程序进行本地编译,而这实际上是提前编译了。

本地编译将PL/SQL和Java程序的字节代码转换成机器可执行的程序代码。

因为本地编译消除了即时编译的延时,所以提高了执行速度。

但不幸的是,它却要花些时间将解释过的程序编译为机器代码。

权衡之下,如果您并不经常改变代码,本地编译是一个好的选择。

如下所示,有3种方法可将Oracle的Java文件嵌入到数据库实例中:(1) 处理过程分两步:(a)使用javac编译Java源文件,产生Java字节码程序。

(b)使用Oracle loadjava工具将文件放入数据库实例。

(2) 一步处理即可,使用loadjava工具编译文件,并将编译后的Java类文件放入数据库实例。

(3) 一步处理过程,像处理存储Java类一样使用DDL (Data Definition L anguage,数据定义语言)创建和编译Java源文件。

Oracle 9i R1中的语法分析程序有时会出现问题,并且在Oracle 9i R1中使用DDL命令创建Java程序可能会失败。

在9i R2以及以后的版本中这些问题都得到了解决。

本章所有的示例都将编译并通过使用loadjava工具载入数据库实例中。

小提示:如果选择使用上面的第二种方法,那么在我们试图重写文件时,可能会产生ORA-2953 3错误,这是因为在一些数据库版本中并不支持loadjava工具的替换(replace)选项。

要解决这个问题,您只需要使用dropjava工具并附带–user选项删除<file_name>.class文件,然后重新运行loadjava工具载入文件即可。

本章假设您对Java有一个基本的了解,即能够编译和运行Java程序。

本章所有的示例都提供了实例命令行说明。

在附录D中有关于这方面的内容的一个基本指南,并且提供了Java环境配置说明。

Java的存储程序体和传统的PL/SQL程序体很像,由单个会话使用定义者权限或调用者权限访问模式调用它们。

但Java在Oracle数据库实例的内部和外部的工作方式有一些不同之处,这些不同之处如下所示:●首先是执行的控制有明显的不同,Oracle实例外部的Java应用程序包含main()方法,并通过调用它来运行程序,而在实例内部的Java程序则没有包含main()方法。

在Oracle实例中存储的Java程序有两种类型的行为,它们是:●第1种Java程序的功能相当于具有函数和过程的包,它是一些不可实例化的类。

这就要求程序中的所有变量和方法必须是静态的,即将它们作为类的方法。

作为具有函数和过程的PL/SQL 包的镜像,这限制了它们的范围。

为了更易于访问外部Java程序,这种程序代码的语法有所改变。

●第2种Java程序的功能相当于对象类型体的实现,它们是一些可以实例化的类,并且程序中的变量和方法可以是静态的,也可以是非静态的。

但与外部Java类不同的是,它们的构造函数不能被重载,即它们只有一个默认的构造函数。

JDBC2 API中的SQLData接口用于实例化这种类型的程序,并且实例化还包含了在PL/SQL和Java间映射数据类型。

●Java类以Java字节码的形式保存在一个空文本中,并压缩为Oracle数据库实例的外部Java档案文件。

Oracle把它们作为源、类以及Java对象资源来管理。

模式中包含一个J AVA$OPTIONS表,它可被DBMS_JAVA包、SET_COMPILER_OPTION和RESET_COMPILE R_OPTION过程或GET_COMPILER_OPTION函数访问和配置。

●内部Java类文件并不支持用户接口,这意味着它们不能被直接输出到控制台或本地声音设备。

声音文件可以在Oracle内部处理,但它们不能访问本地声音设备。

与Oracle 9i 相比,Oracle 10g稍微有些改变,因为它使用的是Java SDK 1.4.x,支持Headless(无头) AWT。

●Oracle内部的Java类的名称有两种格式。

一种是支持标准模式数据库对象的短格式,它最长可以有30个字符。

当一个类的名称超过长度限制时,Oracle将自动创建一个哈希名称作为类的短名称,并将长名称存放在别处。

●Oracle内部Java类不支持标准Java的Class.forName()方法。

但Oracle 9i和Oracl e10g支持使用多个分解器来定位类。

若使用其中一个来定位类,结果却是运行另一个分解器,我们就会得到意料之外的结果。

●操作资源是受严格限制的,您必须拥有SYSDBA用户权限才能变更它们。

可以使用D BMS_JAVA包和GRANT_PERMISSION过程像IO文件来一样打开操作资源。

●Java线程针对Oracle内部的Java类工作方式与外部类有所不同。

Oracle JVM使用的是非抢占的线程模式。

这意味着所有的线程运行在一个单一的操作系统线程中,Oracle J VM仅是在线程之间切换上下文。

切换上下文的意思是,Oracle JVM以循环的方式在每一个时间段产生一个线程,直至所有线程结束。

注意:正在使用Oracle版本会告诉您应该使用哪个版本的JDK(Java Software Development Kit,Java软件开发包)。

为简单起见,本章所有的示例都是使用Oracle 9i支持的Java SDK 1.3开发的。

同时,它们也被Java SDK 1.4所支持。

Oracle Java开发人员向导列出了两个关键的错误代码,但其实还存在很多其他的错误代码。

在这我们并不想列出这些错误代码,而是将它们放在在本章后面的“创建、装载、删除、使用Java类库时的故障诊断”一节介绍。

现在我们已经回顾了Oracle Java体系结构的一些关键组件,下一节将介绍几种JDBC驱动程序。

上一页首页下一页2 Oracle JDBC连接类型为了满足不同的应用需求,Oracle有3种方法实现JDBC (Java Database C onnection,Java 数据库连接)。

它们是瘦(thin)连接、胖连接和默认连接,分别对应于客户端驱动、服务器端驱动、调用接口驱动(或中间层驱动)。

下一节会分析这3种连接方式。

2.1 客户端驱动或JDBC瘦驱动Oracle瘦连接大概是Java应用程序、JSP、EJB (Enterprise Java Beans,企业级Java Bean)等最常用的一种连接方式了,它为不直接访问Oracle库文件而创建代码提供了许多便利。

相关文档
最新文档