Java开发Oracle的jdbc驱动三种主要分类:

时间:2021-07-13 00:12:22

  1、JDBC OCI: oci是oracle call interface的缩写,此驱动类似于传统的ODBC 驱动。因为它需要Oracle Call Interface and Net8,所以它需要在运行使用此驱动的JAVA程序的机器上安装客户端软件,其实主要是用到orcale客户端里以dll方式提供的oci和服务器配置。
  2、JDBC Thin: thin是for thin client的意思,这种驱动一般用在运行在WEB浏览器中的JAVA程序。它不是通过OCI or Net8,而是通过Java sockets进行通信,是纯java实现的驱动,因此不需要在使用JDBC Thin的客户端机器上安装orcale客户端软件,所以有很好的移植性,通常用在web开发中。
  3、JDBC KPRB: 这种驱动由直接存储在数据库中的JAVA程序使用,如Java Stored Procedures 、triggers、Database JSP's。因为是在服务器内部使用,他使用默认或当前的会话连接来访数据库,不需要用户名密码等,也不需要数据库url。

  在应用开发的时候,通常是用前面两种方式,下面是数据库url的写法:
  jdbc:oracle:thin:@server ip: service
  jdbc:oracle:oci:@service
  看来oci的还更加简洁,ip可以省掉不写了,这是因为oci驱动通过客户端的native java methods来条用c library方式来访问数据库服务器,使用到了客户端的net manager里的数据库服务配置。
  因为oci方式最终与数据库服务器通信交互是用的c library库,理论上性能优于thin方式,据说主要是体现在blob字段的存取上。
  开发oracle经常用到的 pl sql dev使用的估计是oci方式,需要安装客户端,但也可以不安装,但是要抽出其中的oci相关的dll即jar包、注册环境变量、配置侦听文件等,无需安装oracle客户端,用plsql连接远程oracle 详细步见附注。
  oracle在10g之后提供了精简客户端,安装的过程应该包括上面的那些工作。
    代码示例:
    package src.test;

import java.sql.*;

public class dbOCI {
 
 public static void main1() throws SQLException {
  try {
   Class.forName("oracle.jdbc.driver.OracleDriver");
   Connection conn = DriverManager.getConnection(
     "jdbc:oracle:oci:@oracle92", "scott", "tiger");
   Statement stmt = conn.createStatement();
   ResultSet rset = stmt.executeQuery("select * from dept");
   while (rset.next())
    System.out.println(rset.getString(1));
   stmt.close();
   conn.close();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
 }
}

package src.test;

import java.sql.*;

public class dbThin {
 public static void Main2() {
  try {
   Class.forName("oracle.jdbc.driver.OracleDriver");
   String url = "jdbc:oracle:thin:@192.168.0.100:1521:server9i";
   Connection c = DriverManager.getConnection(url, "scott", "tiger");
   Statement stmt = c.createStatement();
   String sql = "select * from dept";
   ResultSet rs = stmt.executeQuery(sql);
   while (rs.next()) {
    System.out.println("dname: " + rs.getString("dname"));
   }
   stmt.close();
   c.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

附注:
无需安装oracle客户端,用plsql连接远程oracle 步骤

1、在安装ORACLE服务器的机器上搜索下列文件,
oci.dll
ocijdbc10.dll
ociw32.dll
orannzsbb10.dll
oraocci10.dll
oraociei10.dll
sqlnet.ora
tnsnames.ora
classes12.jar
ojdbc14.jar
放到一个文件夹,如 oraclient

  2、配置tnsnames.ora,如果本机上没有安装oracle,
可以从安装了oracle的机上拷贝一个(tnsnames.ora文件在%ORACLE_HOME%/network/admin下)放在上面的目录D:/oraclient下。
oracledata =
(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.58)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oracledata)
    )
)

3、添加一个环境变量,名为TNS_ADMIN,值为tnsnames.ora文件所在路径(如:D:/oraclient,特别是重装后或其它操作,忘了TNS_ADMIN变量,plsql登陆就会报无法解析指定的连接标识符),这是为了能够找到上面说的tnsnames.ora。如果本机上安装了ORACLE,并且设置了ORACLE_HOME环境变量,那么会自动在%ORACLE_HOME%/network/admin/位置查找tnsnames.ora文件。

4、设置ORACLE的语言,添加环境变量:
“NLS_LANG = SIMPLIFIEDCHINESE_CHINA.ZHS16GBK”,(AMERICAN_AMERICA.US7ASCII 是ASCII编码类型,其它类型可自己到服务器看一下或网上查找一下)