32位和Java中的64位JDBC同时

Posted

技术标签:

【中文标题】32位和Java中的64位JDBC同时【英文标题】:32 and both 64 bit JDBC in java at same time 【发布时间】:2016-11-18 10:36:57 【问题描述】:

场景:我已经安装了一个 32 位的 ODBC 驱动程序来连接数据库 A,并安装了一个 64 位的 ODBC 驱动程序来连接数据库 B。

我知道我可以连接到 java x86 中的 32 位 ODBC 驱动程序和 java x64 中的 64 位 ODBC 驱动程序,但是如果我需要使用 64 位 ODBC 驱动程序和 32 位 ODBC 驱动程序怎么办同一个 Java 应用程序中的驱动程序?

我可以在 Java 中同时连接 32 位 ODBC 驱动程序和 64 位 ODBC 驱动程序吗?

我很好奇。

【问题讨论】:

您的问题有点不清楚,应该改写以更正/澄清。 “ODBC:JDBC”建议您尝试通过 JDBC 驱动程序(通过 ODBC-to-JDBC 桥)使 ODBC 客户端应用程序连接,但您所说的其他一切都表明您真正想做的是制作 Java JDBC 应用程序通过几个 ODBC 驱动程序连接(通过 JDBC 到 ODBC 桥)。 【参考方案1】:

我可以在 java 中连接到 32 位 ODBC:JDBC 并同时连接到 64 位 ODBC:JDBC 吗?

没有。你不能。无法从 64 位 JVM 调用 32 位本机代码。但是,ODBC 应该是 ODBC - 如果您有 64 位 ODBC:JDBC 驱动程序,那么它应该可以从 64 位 Java 进行连接。

【讨论】:

作为此答案的后续行动,OP 应查看this。正如您已经提到的,无法通过 64 位 Java 应用程序连接到 32 位 ODBC。 这些都不是很准确。看我的回答。 @TallTed 从技术上讲,这是完全准确的。您正在调用第二个 JVM 来充当桥梁;因此您仍然需要一个 32 位 JVM(或至少一个 32 位 ODBC 驱动程序和某种主机)来运行 32 位本机代码。 我没有调用第二个 JVM。您是正确的,不可能从 32 位 JVM 到 64 位 ODBC 驱动程序,也不能从 64 位 JVM 到 32 位 ODBC 驱动程序建立 Type 1 JDBC 连接——但这两者都可以作为类型 3 JDBC 连接。 OP 没有问,“我可以从 32 位或 64 位 JVM 建立 a Type 1 JDBC 连接到 32 位和 64 位 ODBC 驱动程序吗? "她问“我可以为两者建立JDBC 连接 ...吗?” @TallTed OP 的问题是 如果我需要在同一个应用程序中使用 64 位驱动程序和 32 位驱动程序怎么办? 在 n 层设计中,每一层都是一个独立申请。我更喜欢数据库的 type-4 JDBC 驱动程序而不是 ODBC 桥。或者,如果根本不可能,则使用 E​​TL 过程。【参考方案2】:

是的,你可以

使用来自 32 位 JVM 的 64 位 ODBC 驱动程序 使用来自 64 位 JVM 的 32 位 ODBC 驱动程序 在 32 位或 64 位 JVM 中同时使用来自同一 Java 应用程序的 64 位 ODBC 驱动程序和 32 位 ODBC 驱动程序

您只需要使用第 3 类 JDBC 连接——“多层”JDBC 到 ODBC 桥——例如来自my employer 的Enterprise Edition JDBC Driver for ODBC Data Sources,以弥合“位数”差距。

类型 3 JDBC 到 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 桥接器,例如 my employer 中的 Lite Edition JDBC Driver for ODBC Data Sources,它匹配 JVM 的位数和一个 ODBC 驱动程序(比如说 64 位,此处),并且仅将“多层”JDBC-to-ODBC 桥用于其他(32 位)ODBC 驱动程序。 记住Java 8 and later no longer include the Sun JDBC-to-ODBC Bridge (classname sun.jdbc.odbc.JdbcOdbcDriver, used jdbc:odbc:<dsn>;UID=<uid>;PWD=<pwd> URLs) in the JVM。

【讨论】:

以上是关于32位和Java中的64位JDBC同时的主要内容,如果未能解决你的问题,请参考以下文章

如何在64位windows7上同时使用32位和64位的Eclipse

如何在同时拥有 64 位和 32 位版本的同时安装 64 位软件包?

如何同时支持32位和64位组件自动安装

当同时安装 32 位和 64 位 JVM 时,如何使用 32 位 JVM 强制运行 Jar 文件?

如何编写同时兼容 32 位和 64 位的代码?

如何制作同时支持 32 位和 64 位架构的 Android 应用程序?