在64位客户端使用32位的ODBC配置

这个场景比较特殊,是一个客户遇到的问题触发我写的这篇文章。数据库服务器通常安装的都是64位的操作系统和64位的数据库软件。客户端使用的操作系统和客户端程序复杂度远比服务器要多很多,安装的客户端操作系统既可能是32位,也可能是64位,在32位的操作系统只能安装32位的数据库客户端软件。在64位的客户端操作系统可以安装32位和64位的数据库客户端软件,但是如果客户端使用pl/sql,那么只能安装32位的Oracle 数据库客户端(pl/sql不支持64位的Oracle客户端),如果开发的软件只支持32位平台的,那么在64位的客户端操作系统可能也只能安装32位的Oracle数据库客户端软件,通过32位的Oracle 数据库客户端软件连接到64位的数据库。

        这个项目要实现这样一个目的,开发的Java程序(C/S架构)只支持32位,那么必须通过配置32位的ODBC(必须安装32位的Oracle客户端,开发的Java程序无法加载64位的Oracle数据库客户端驱动)连接到64位的数据库环境,该程序必须确保在32位的客户端和64位的客户端操作系统都能正常使用,32位的客户端下运行是没问题的,这里讨论的就是在64位客户端下运行,通过32位ODBC连接数据库遇到的问题。讨论场景的服务器、客户端配置如下:\       \ 服务器操作系统:Redhat Enterprise 5.4 x86_64bit        数据库服务器:Oracle 11gR2 RAC Database 64bit
客户端:Win7 旗舰版 x86_64bit
Oracle Database客户端:Oracle 11gR2 Database x86
 Java JDK:jdk-6u31-windows-i586
下面对遇到的问题及解决方法进行讨论:
1.数据库支持的操作系统版本。
        数据库运行在Linux环境,客户端都运行在Windows平台,首先明确Oracle数据库支持的Windows平台。

       从上面的文档中可以看出Oracle的11gR2数据库产品是完全支持Windows7的专业版、企业版和旗舰版,所以在这样的平台安装数据库和客户端都是没有问题的。
2.安装32位的Oracle Database客户端软件。
        在win7 64bit的客户端安装32位的Oracle Database客户端软件,安装后准备配置ODBC的时候发现一个问题,通过传统的控制面板->ODBC管理器->创建ODBC数据源的方式无法找到相应的Oracle Database驱动程序,如下图所示。

从上图可以看出没有Oracle Database的驱动程序。
3.打开加载32位驱动程序的ODBC管理器。
        通过传统的方式之所以无法找到Oracle Database驱动程序,原因在于平台是64位,但安装的是32位的Oracle Database软件,常规的ODBC管理器不会加载32位的驱动程序。通过执行C:\Windows\SysWOW64\odbcad32.exe程序可以打开加载32位驱动程序的ODBC管理器,如下图所示。

上图中的"Oracle in OraDb11g_home1"即使32位的客户端驱动程序。
4.创建连接数据库的ODBC数据源。
         如下图所示,创建连接到数据库的ODBC数据源。

5.准备测试环境。
        使用JCreator运行一段通过配置的ODBC连接数据库的代码,确保编译和执行Java代码使用的是32位的JDK,执行的代码如下:
import java.sql.Connection;
import java.sql.DriverManager;

import java.sql.SQLException;

public class Java_Odbc_Sql {

     private static final String drivename="sun.jdbc.odbc.JdbcOdbcDriver";
     private static final String url="jdbc:odbc:testodbc;user=system;password=oracle" ;
     public  static void  getCon() throws Exception{

           try {
                     Class.forName(drivename);//在JVM中注册JDBC驱动程序
                   @SuppressWarnings("unused")

                    Connection con=DriverManager.getConnection(url);//建立到DBMS的连接                   

                   } 

           catch (SQLException e) {

                    System.err.println(e.getMessage());
                    throw e;

           }

           catch (Exception e) {
               System.err.println(e.getMessage());

                throw e;

      }

      }

     /**
      * 连接测试
      * @param agrs
      */

      public static void main(String agrs[]){
             try{
                getCon();
                 System.out.println("连接成功!");         

             }catch(Exception e){
                 System.out.println("连接失败!");
                 e.printStackTrace();
           }
          }
}
6.运行测试代码。
        执行上面的测试代码,发现使用32位的JDK通过配置的testodbc数据源(32位的驱动程序)能够正常的连接到64位的数据库,如下图所示。


    这个场景并不完全真实,只是我个人的一个联想和猜测,中间极有可能出现不正确或不完整的表述。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值