【问题标题】:How can I expose a C ODBC connection to a JVM using JNI?如何使用 JNI 向 JVM 公开 C ODBC 连接?
【发布时间】:2010-09-15 20:41:00
【问题描述】:

我正在使用调用 API 在现有 C 应用程序中嵌入 JRE,并且 我希望能够使用 JDBC 来处理该代码中的数据库。这 应用程序是一个事务处理应用程序,而数据库 事务由应用程序的 C 部分中的代码管理,并且 java 代码必须在该事务中运行。这意味着我无法打开 新的连接,我必须重新使用现有的。

那么,有没有办法提供对现有 ODBC 连接句柄的 JDBC 访问 什么时候设置JRE?也许是一些 JDBC-ODBC 桥,但与 该名称的现有驱动程序,可以设置为使用现有的驱动程序 连接和交易。

在我看来,我的其他选择如下:

  • 为每个可能的 C 操作提供 java 等效项 应用程序(由于很多原因,这是不可取的——我们有一个 很多方法,复制它们是一件很痛苦的事情。

  • 编写我自己的 JDBC 驱动程序,将 ODBC 连接与 JNI 包装起来。当然会 是一个有趣的周末(月)项目,但我希望需要更快地完成一些事情 不止于此。

帮助我,Stack-Overflow,你是我唯一的希望!

【问题讨论】:

    标签: java jdbc odbc java-native-interface


    【解决方案1】:

    不知道这是否可行,但是... 我快速浏览了 Sun 的 JDBC-ODBC 桥的反编译源代码。似乎您可以对 JdbcOdbcConnection 进行子类化,以便它使用已知的连接句柄和已经打开的状态来初始化自己。这假定 Java 端的连接句柄是实际的 ODBC 连接句柄或指向连接对象的指针,并且 JDBC-ODBC 桥使用的 ODBC 库与您的代码在它们可以共享连接句柄的意义上是兼容的。

    您需要检查 Sun 的许可证是否允许开发人员执行此类欺骗。

    【讨论】:

    • 亚历山大,这就是我最终要做的;事实上,当我问这个问题时,我已经在采用这种方法,结果证明效果很好。感谢您的独立验证!
    【解决方案2】:

    Sun 在 JDK 中提供了JDBC-ODBC bridge

    编辑:重读听起来你已经知道它并且不想使用它。

    【讨论】:

    • JDBC-ODBC 桥提供了一种创建新连接的方法,而不是重用现有连接;我在问题本身中注意到了这一点。
    猜你喜欢
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    相关资源
    最近更新 更多