java - 如何使用 JNI 将 C ODBC 连接公开到 JVM?

标签 java jdbc odbc java-native-interface

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

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

据我所知,我的其他选择如下:

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

  • 编写我自己的 JDBC 驱动程序,用 JNI 包装 ODBC 连接。当然可以了 是一个有趣的周末(月)项目,但我希望需要更快地完成一些事情 不仅如此。

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

最佳答案

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

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

关于java - 如何使用 JNI 将 C ODBC 连接公开到 JVM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/180167/

相关文章:

java - 为什么 Swing 组件有 .getParent() 方法,是否违反面向对象原则?

java - 使用 JTextFields 中的字符串填充 JTable

Python pyodbc 连接到 IBM Netezza Erroring

c# - 如何在 C# 中使用通用数据库连接调用存储过程?

php - 在 Linux 上使用 PHP 编辑 MS Access 数据库

java - 是否可以使 JToggle 文本取决于其状态?

java - 如何使用java Stream检查集合是否为空

java - 使用 Java 中设置的路径变量执行外部程序?

java - 不关闭我的 JDBC PreparedStatements 会导致内存泄漏吗?

java - JDBC Batch 执行速度极慢