Java中同时使用32位和64位JDBC是什么意思?

3
情境:我已经安装了32位的ODBC驱动程序以连接到A数据库,同时也安装了64位的ODBC驱动程序以连接到B数据库。
我知道在Java x86中可以连接到32位的ODBC驱动程序,在Java x64中可以连接到64位的ODBC驱动程序。但如果我需要在同一个Java应用程序中使用64位和32位的ODBC驱动程序怎么办?
我能否在Java中连接到32位和64位的ODBC驱动程序?
我对此非常好奇。

您的问题有点不清楚,需要重新措辞以进行更正/澄清。"ODBC:JDBC" 表示您正在尝试通过 JDBC 驱动程序(通过 ODBC-to-JDBC 桥接)使 ODBC 客户端应用程序连接,但您所说的其他一切都表明您真正想做的是通过几个 ODBC 驱动程序(通过 JDBC-to-ODBC 桥接)使 Java JDBC 应用程序连接。 - TallTed
2个回答

3

我能在Java中连接到32位ODBC:JDBC和64位ODBC:JDBC吗?

不行。从64位JVM调用32位本地代码是不可能的。但是,ODBC应该是ODBC - 如果你有一个64位的ODBC:JDBC驱动程序,那么它应该可以连接到64位的Java。


作为对这个答案的跟进,OP应该看一下这个链接:https://dev59.com/BWPVa4cB1Zd3GeqP2AsD。正如你已经提到的那样,通过64位Java应用程序无法连接到32位ODBC。 - px06
这些都不是很准确。请看我的回答。 - TallTed
@TallTed 从技术上讲,这完全是准确的。你正在调用第二个JVM来充当桥梁;因此,你仍需要一个32位JVM(或至少是一个32位ODBC驱动程序和某种主机)来运行32位本地代码。 - Elliott Frisch
我没有调用第二个JVM。你说得对,从32位JVM到64位ODBC驱动程序或从64位JVM到32位ODBC驱动程序无法建立Type 1 JDBC连接,但这两者都可以作为Type 3 JDBC连接来建立。OP并没有问:“我能否从32位或64位JVM向32位和64位ODBC驱动程序建立Type 1 JDBC连接?”她问的是“我能否建立JDBC连接到两个...?” - TallTed
@TallTed OP的问题是:如果我需要在同一个应用程序中使用64位驱动程序和32位驱动程序怎么办?在n层设计中,每个层都是独立的应用程序。我更喜欢使用数据库的type-4 JDBC驱动程序而不是ODBC桥接器。或者使用ETL过程,如果这根本不可能。 - Elliott Frisch

0

是的,你可以

  • 从32位JVM使用64位ODBC驱动程序
  • 从64位JVM使用32位ODBC驱动程序
  • 在同一Java应用程序中同时使用64位ODBC驱动程序和32位ODBC驱动程序,在32位或64位JVM中均可

您只需要使用Type 3 JDBC连接--“多层”JDBC到ODBC桥接--例如企业版JDBC驱动程序ODBC数据源来弥合“位数”差距。

一种类型3的JDBC-to-ODBC连接将一个“纯Java” JDBC驱动程序放在您的Java应用程序的JVM中,通过TCP/IP与一些基于C的ODBC客户端组件进行通信,这些组件与ODBC驱动程序一起放在“本机”操作系统环境中 - 这些驱动程序不需要在彼此之间或与JVM相同的主机上。

32位JVM中的类型3 JDBC驱动程序
   -> ... TCP/IP ... 
      -> 64位ODBC桥接中间件
         -> 64位ODBC驱动程序 

或者

64位JVM中的类型3 JDBC驱动程序
   -> ... TCP/IP ... 
      -> 32位ODBC桥接中间件
         -> 32位ODBC驱动程序 

您可以选择使用类型1的“单层”JDBC到ODBC桥接器,例如ODBC数据源的Lite版JDBC驱动程序,该驱动程序与JVM和一个ODBC驱动程序(假设这里是64位)匹配,并仅将“多层”JDBC到ODBC桥接器用于另一个(32位)ODBC驱动程序。请记住,{{link3:Java 8及更高版本不再在JVM中包含Sun JDBC到ODBC桥接器(类名sun.jdbc.odbc.JdbcOdbcDriver,使用jdbc:odbc:<dsn>;UID=<uid>;PWD=<pwd> URL)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接