• Java连接oracle数据库的OCI和THIN


    使用jdbc连接上oracle有两种方法:

    1、 使用thin连接

    由于thin驱动都是纯Java代码,并且使用TCP/IP技术通过java的Socket连接上Oracle数据库,所以thin驱动是与平台无关的,你无需安装Oracle客户端,只需要下载一个thin驱动的jar包,并且将环境变量中的CLASS_PATH变量中加入thin驱动的路径就可以了。Thin驱动虽然与平台无关,也无需安装Oracle客户端,但是有一个致命的缺陷就是性能一般,达不到如OCI方式的企业级的要求。另外,如果一个oracle数据库对应一台主机,可以使用thin连接;如果一个oracle数据库对应四五台主机(集群服务器),使用thin时,需要把tnsnames.ora文件中的相关数据库的整个连接字符串都拷贝下来,如此才能连接上oracle集群数据库。而这种方法也是和数位同事讨论并Google了大量资料后才发现的。之前我一直以为thin不支持集群数据库的方式。

    然后就是设置连接字符串了。这个是固定的写法,如下所示:

    Class.forName("oracle.jdbc.driver.OracleDriver");

    Connection conn =DriverManager.getConnection ("jdbc:oracle:thin:@10.87.134.107:1521:ora9","sms" , "zzsms");

    在上面的连接字符串中,如果不是集群数据库就在@后直接输入数据库IP地址即可;如果是集群数据库,则需要在@后输入tnsnames.ora文件中有关该数据库的所有描述内容(通常是=后边的所有的内容)。

    2、 使用oci连接(Oracle Call Interface)

    使用OCI连接数据库是企业级的做法,适应于单个数据库和集群数据库,性能优越,尤其是连接池功能大大提高了应用程序的性能和并发量。唯一的缺点是,若想使用OCI必须要安装Oracle客户端。

    安装完Oracle客户端后,里面有个jdbc的文件夹,该文件夹下就包含了OCI驱动和THIN驱动。所以是不需要去网上下载的。这个驱动在jdbc/lib文件夹下,主要有classes12.jar、nls_charset12.jar等等。其中以12结尾的驱动包适应于jdk1.1以上的版本。以11结尾的适应于jdk1.1以下的版本。文件名中含有classes的jar包就是驱动程序,文件名中含有nls的jar包是与国际化有关的类。

    找到文件后,就需要把class和nls的jar包的绝对路径加入CLASS_PATH环境变量,否则会报ClassNotFound的异常。

    设置环境变量后,就可以直接使用OCI驱动了,不要被“驱动”两个字吓坏了,(驱动就是一个可执行文件和一个连接字符串)。很简单,无非是连接字符串的问题。标准的连接字符串如下所示:

    Class.forName("oracle.jdbc.driver.OracleDriver");

    Connection con = DriverManager.getConnection("jdbc:oracle:oci:@xxzc","duansiyuan", "oracle_password");

    只要这两行,就可以保证连接到数据库,而这个数据库不管是单个数据库还是集群数据库。其中xxzc就是数据库名,duansiyuan就是用户名,oralce_password就是密码。这种方式和C#中的方式比较类似。

    需要注意的问题:

    1、oracle_home/jdbc文件夹下有大量的样板代码和帮助文档,里面对如何安装和使用jdbc都有详细的说明,请引起高度重视并耐心阅读。里面有很多知识仅通过自己反复的实践是无法获取的。

    2、如果想要高性能,请使用OCI连接,如果不想装Oracle客户端,请使用thin连接。

    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编码类型,其它类型可自己到服务器看一下或网上查找一下)

  • 相关阅读:
    西交应用统计学(四)
    SPSS非参数检验
    并查集实现
    二叉树遍历非递归算法
    算法导论——渐近符号、递归及解法
    SPSS均值过程和T检验
    二维数组的查找及向函数传递二维数组问题
    printf()的格式
    C++ string类型的读写
    替换字符串中的空格
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/5751856.html
Copyright © 2020-2023  润新知