赛迪网技术社区 » Oracle » Java连接Oracle数据库的各种方法 转到动态网页
--> 本页主题: Java连接Oracle数据库的各种方法 返回 | 悬赏 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题
changelive


用户名: changelive
级别: 总版主
精华: 31
发帖: 402
经验值: 785 点
积分: 1678 分
贡献值: 0
注册时间:2007-04-11


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。 /dA 0L4gc  
   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程序。 I26UU  
   "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  
   Tff fG\  
  如何配置使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  
   LX|_y\  
  如何在不同的操作系统上根据接口类型设置客户端: aeS N\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  
   ,E6g 8i:-  
     在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]  5PgXit*6P  
  Connection conn= 1i7\<e*.  
      DriverManager.getConnection =pF9@XK%v  
       ("jdbc:oracle:oci8[9]:@RAC","scott","tiger"); ".T\=)#>  
                  | Y>^YV c  
                  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  
   lN3WOW'@  
    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  
   !$bB i|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(); m1MDVB  
    ResultSet rset = stmt.executeQuery ( B3T"lCl~  
     "select BANNER from SYS.V_$VERSION" P=;j%*C4  
    );

本贴标签:
顶端 Posted:2007-04-17 08:44 | [楼 主]
3946469




用户名: 3946469
级别: 高级工程师
精华: 4
发帖: 197
经验值: 252 点
积分: 502 分
贡献值: 0
注册时间:2007-04-18




顶端 Posted:2007-04-19 16:06 | 1 楼
dragon_zf_china




用户名: dragon_zf_china
级别: 技术菜鸟
精华: 0
发帖: 3
经验值: 3 点
积分: -4 分
贡献值: 0
注册时间:2007-03-29



谢谢楼主!!

顶端 Posted:2007-05-03 10:58 | 2 楼
010032




用户名: 010032
级别: 工程师
精华: 1
发帖: 102
经验值: 133 点
积分: 264 分
贡献值: 0
注册时间:2007-04-18




顶端 Posted:2007-05-10 14:04 | 3 楼
liaozhong




用户名: liaozhong
级别: 高级工程师
精华: 0
发帖: 236
经验值: 244 点
积分: 49 分
贡献值: 0
注册时间:2006-10-14



比较有难度

顶端 Posted:2007-05-31 19:22 | 4 楼

 赛迪网技术社区 -> Oracle
快速发帖 顶端
内容
HTML 代码不可用

使用签名
Wind Code自动转换

字数检查 恢复数据
按 Ctrl+Enter 直接提交
表情 [更多]