Java连接Oracle数据库的各种方法
java与oracle的接口: E4YL4Ov^k 在数据库中运行JAVA可以说是ORACLE8i的最令人激动的新特性。在你创建的使用ORACLE8i 数据库的应用程序中,你可以使用与JAVA有关的新特征,轻松的将程序发布到INTERNET或INTRANET上。 ll'h( %VMG8-Iu Methods for Using Java in ORACLE oO_1iPT# ` d[QW8( 大家都知道JAVA在跨平台开发与INTERNET开发中已经比较流行,ORACLE8i及以后的版本中都包含了对在数据库中运行JAVA的扩展支持,这里有两种方法可以使用: 2l |>uv, 6)ix JDBC:与ODBC类似, JDBC 提供了一个驱动接口使你可以在JAVA程序中访问数据库。注:JDBC驱动内嵌在数据库中虚拟机中。 EPtD4: %0j2 d SQLJ:是一个JAVA预编译器,它可以将内嵌的SQL语句转化为JAVA语句.SQLJ的使用与运行机理与其它ORACLE的与编译器(如Pro*C,Pro*COBOL)类似。实际上,为了使我们形象的记住SQLJ提供的功能,我们也可以直接将SQLJ改名为Pro*Java。 /dA0L4gc SV_r\t}w\ 将JAVA集成到数据库中是双向的。也就是说你可以在JAVA中调用SQL与PL/SQL,也可以在SQL与PL/SQL中调用JAVA。JAVA程序可以直接通过JDBC驱动调用SQL与PL/SQL,反过来,你也可以在SQL与PL/SQL中直接调用JAVA。在数据库中,JAVA命名空间直接映射到数据库模式的命名空间中,这样可以方便JAVA的存取与调用。数据库同时提供扩展的DDL语句,通过这些语句,你可以象创建一个存储过程一样在数据中创建内嵌的JAVA程序。 I26U U "J
zaA
Features of ORACLE JDBC Drivers wsQXb@?eW[ jT'Yb
<4 在ORACLE8i中有三种类型的JDBC驱动,他们都使用相同的 syntax, APIs, and Oracle extensions,以使JAVA代码在robust clients、Web-based Java applets, and Java stored procedures之间保持轻便灵活:三种类型如下: zVHxOLX 1.JDBC OCI: 此驱动类似于传统的ODBC 驱动。因为它需要Oracle Call Interface and Net8,所以它需要在运行使用此驱动的JAVA程序的机器上安装客户端软件 Il&JWxdzU 2.JDBC Thin: 这种驱动一般用在运行在WEB浏览器中的JAVA程序。它不是通过OCI or Net8,而是通过Java sockets进行通信 ,因此不需要在使用JDBC Thin的客户端机器上安装客户端软件。 ?`"1`x$fN 3.JDBC KPRB: 这种驱动由直接存储在数据库中的JAVA程序使用,如Java Stored Procedures 、triggers、Database JSP's。It uses the default/ current database session and thus requires no additional database username, password or URL. aVjG^5iYd TfffG\ 如何配置使JAVA可以通过Oracle JDBC Drivers连接到数据库:1.安装Sun JDK. ~J+:|>%9 2. 修改PATH环境变量,使其指向JDK的bin目录 C0*3>1'L0
3. 设置CLASSPATH环境变量,使其指向正确的JDK的lib及oracle的JDBC接口。 *$aN0[9*/ CLASSPATH = ".;????" 'Ra 3. 运行"java –version" ,验证java的版本。 ErN9o1a L X|_y\ 如何在不同的操作系统上根据接口类型设置客户端: aeSN\T] 对JDBC THIN接口: YES^0|h 在windows与unix下的设置方法一样: tG7>Z,(~ 1.根据jdk的版本,只需要将classesxx.zip拷贝到指定的目录,不需要安装Oracle Client。在装完数据库后,该文件会在$ORACLE_HOME/jdbc/lib目录下。2.设置CLASSPATH,使其包含上面的classesxx.zip TZS+tG: 3.根据需要,拷贝oracle的其它zip文件并设置CLASSPATH 1Q^LZVHAW V)W;8 对JDBC OCI接口: )840Us$/ Fow Windows: {2wOnMSs 1.安装Oracle Client. w^.LR|) 2.根据jdk的版本,设置CLASSPATH,使其包含正确的classesxx.zip $M f`z 3.根据需要设置CLASSPATH,使其指向Oracle的其它zip文件 G~2ihL 4.设置PATH,使其包含$ORACLE_HOME\bin目录 0<9&`n ,^Lo1* For unix: z<su>-e} 1.安装Oracle Client. REvN"/? 2.根据jdk的版本,设置CLASSPATH,使其包含正确的classesxx.zip {'8`DxdlG 3.根据需要设置CLASSPATH,使其指向Oracle的其它zip文件 X@Lx$5 4.设置LD_LIBRARY_PATH,使其包含$ORACLE_HOME/lib目录 ;Mf%Oy* y@';YV<N 备注: _nO.(zh classesxx.zip一般在ORACLE_HOME\jdbc\lib目录下。 uZ~o8odt ,E6g8i:- 在ORACLE_HOME\jdbc\lib目录下的与Oracle JDBC Drives驱动有关的文件的解释: +'
;yU - classes12.zip sS\
k]g Classes for use with JDK 1.2.x. It contains the JDBC driver s7&B^S`At classes except classes necessary for NLS support in Object and Ku$=+&!
Collection types. ]wRmo-2 B5FR#4
*Q3 - nls_charset12.zip sM'C NLS classes for use with JDK 1.2.x. It contains classes necessary /Dns] for NLS support in Object and Collection types. zz7jn2( nI#\"rY - classes12_g.zip B,3;fw`Y Same as classes12.zip, except that classes were compiled with $'U8FGee "javac -g". t1|(}Pmt Fr*/PG;^y: JDBC连接数据库的语法: 5 ~zp JDBC THIN: BFB">]1? l[@drouPh |']8FQ' Code: [Copy to clipboard] V(mQu(85 Connection conn= 7~$+0sY~ DriverManager.getConnection jm00&w+$= ("jdbc:oracle:thin:@dlsun511:1521:ora1","scott","tiger"); SC}t g
?r | | | dA5}[?;$ machine(ip@) : port# : sid 1^m#RtzS K1Dx[a JDBC OCI: s`6o}{
s_ og*y;M Code: [Copy to clipboard] 5 PgXit*6P Connection conn= 1i7\<e*. DriverManager.getConnection =pF9@XK%v ("jdbc:oracle:oci8[9]:@RAC","scott","tiger");
".T\=)#> | Y>^YVc Net Service }d/<6/Y? v .?8%[B JDBC THIN与JDBC THIN对比: |6?P!xGU 相同之处: !I7y@
!YX The JDBC Thin, JDBC OCI, and JDBC Server drivers all provide the same functionality. They all support the following standards and features: M,eA * JDBC 2.0 8N`e.OEI2 * Partial JDBC 3.0 (in JDBC driver version 9.2) f2S!H{g* * the same syntax and APIs Hvz)EjR% * the same Oracle extensions rRVY/T r 主要是JDBC OCI 接口比JDBC THIN接口效率高! _oxHgy
Z `Q_7Pv/g How does one connect with the JDBC Thin Driver? `)/?_9% The the JDBC thin driver provides the only way to access Oracle from the Web (applets). It is smaller and slower than the OCI drivers. - B~z*> import java.sql.*; jD eW9j UN)a?&&B[ Code: [Copy to clipboard] }:t=l3hZ class dbAccess { ft&(Mv
w public static void main (String args []) throws SQLException [d(wT { 1%KN7 @?g DriverManager.registerDriver ( 9['qh"BA new oracle.jdbc.driver.OracleDriver() >G%x>hg6h ); VEWbaV:uf &b(=/U%B Connection conn = DriverManager.getConnection h6tPry ("jdbc:oracle:thin:@dbhost:1521:ORA1", "scott", "tiger"); EZI}]q9=( // @machine:port:SID, userid, password F=J,8F?!7b lN3W OW'@ Statement stmt = conn.createStatement(); -BGgu9: ResultSet rset = stmt.executeQuery ( ~b~D* "select BANNER from SYS.V_$VERSION" d"0i`$ % ); ua!6Btl]% while (rset.next()) Sx&K&<b( System.out.println (rset.getString(1)); // Print col 1 5'-6z+X stmt.close(); .2J{WbOya } !FZ -G^5 } 4Oj7h}Bn( How does one connect with the JDBC OCI Driver? BQC)-y8E One must have Net8 (SQL*Net) installed and working before attempting to use one of the OCI drivers. ,:kK8 9Hm7K>~~ u)b(k Code: [Copy to clipboard] Y7l;1t9]u import java.sql.*; \8Epax( class dbAccess { Y'?=3isT public static void main (String args []) throws SQLException Z5#MT\sF { GC^4?53 try { =vW0P` Class.forName ("oracle.jdbc.driver.OracleDriver"); B%:Myk, } catch (ClassNotFoundException e) { g5CTYH~T e.printStackTrace(); a/uaoA] * } g,B1?8 !$bBi|R Connection conn = DriverManager.getConnection ?.i\6}! ("jdbc:oracle:oci8:@ORA1", "scott", "tiger"); d"st7x` // or oci9 @Service, userid, password z5}GyxLm Statement stmt = conn.createStatement(); CQm_C!'<% ResultSet rset = stmt.executeQuery ( ;Q&$x0m
FS "select BANNER from SYS.V_$VERSION" L}uWN(( ); ,KHxv.T while (rset.next()) O}3Q<.c System.out.println (rset.getString(1)); // Print col 1 BE=Rn~` stmt.close(); , ~r,%:O } ZC7bx18y } %?kTYr[<R How does one connect with the JDBC KPRB Driver? |'#e7? One can obtain a handle to the default or current connection (KPRB driver) by calling the OracleDriver.defaultConenction() method. Please note that you do not need to specify a database URL, username or password as you are already connected to a database session. Remember not to close the default connection. Closing the default connection might throw an exception in future releases of Oracle. KI7`pJz import java.sql.*; V%UF/E5/w z?^|OI "xO{OY]BF Code: [Copy to clipboard] |Kjq;`8K class dbAccess { NwrpTcm public static void main (String args []) throws SQLException \ RdWC1Z { R}'rj/ Connection conn = (new AgV
&?RZ- oracle.jdbc.driver.OracleDriver()).defaultConnection(); ,ai
:<q z#5M!d3 Statement stmt = conn.createStatement(); m1 MDVB ResultSet rset = stmt.executeQuery ( B3T"lCl~ "select BANNER from SYS.V_$VERSION" P=;j%*C4 );
|