Java 在C/C+中使用JNI来利用JDBC是个坏主意吗+;?

Java 在C/C+中使用JNI来利用JDBC是个坏主意吗+;?,java,c++,jdbc,java-native-interface,odbc,Java,C++,Jdbc,Java Native Interface,Odbc,我正在考虑启动一个可以与多个DBMS通信的项目。尽管无法直接从C/C++获得JDBC,但由于以下原因,JDBC仍然具有吸引力: 我的软件应可在Windows/OSX/Linux之间移植。在我看来,在多个体系结构上管理这些平台上的ODBC似乎非常麻烦 我计划将JDBC库与我的应用程序一起分发。这似乎是一个更好的选择,可以尝试为多个环境分发每个ODBC驱动程序 我对JDBC比对ODBC更熟悉 看起来JDBC在某些情况下可能会得到更好的支持 我几乎确信这是一条路要走。然而,我不知道我对ODBC和JNI

我正在考虑启动一个可以与多个DBMS通信的项目。尽管无法直接从C/C++获得JDBC,但由于以下原因,JDBC仍然具有吸引力:

  • 我的软件应可在Windows/OSX/Linux之间移植。在我看来,在多个体系结构上管理这些平台上的ODBC似乎非常麻烦
  • 我计划将JDBC库与我的应用程序一起分发。这似乎是一个更好的选择,可以尝试为多个环境分发每个ODBC驱动程序
  • 我对JDBC比对ODBC更熟悉
  • 看起来JDBC在某些情况下可能会得到更好的支持
  • 我几乎确信这是一条路要走。然而,我不知道我对ODBC和JNI的缺乏经验是否导致我做出天真的结论


    请告知。

    我不会仅仅为了ODBC而涉及JNI/Java。在Windows上,只需使用本机ODBC API。在*nix上,unixodbc运行良好。此外,还有第三方供应商,如Progress(DataDirect)

    我在unixodbc中看到的唯一一个问题(实际上这不是unixodbc的问题)是Sybase ASE和Sybase IQ的混合。Sybase为这两个DBMS提供的驱动程序的构建方式不同,这使得它们在x64系统运行时不兼容(一个构建时需要32位类型,另一个构建时需要64位类型,必须相应地构建unixodbc以匹配所需的驱动程序,并且不能同时使用这两个驱动程序)


    我还建议使用一个抽象层,例如(遗憾的是,似乎没有积极维护——请注意,最新的odbc++存在64位兼容性问题),或者(正在积极维护)。

    那么,您将在本机代码应用程序中嵌入JVM?考虑到你正在努力实现的目标,我认为这是你最好的选择。只要您有纯Java JDBC驱动程序,您就应该可以使用。ODBC工作的唯一方法是让UnixODBC工作——根据所涉及的DBMS,您可能需要购买驱动程序包。如果你问我,痛苦太多,收获甚微。