7

我正在决定在即将推出的 Java servlet 应用程序中使用嵌入式数据库。我有两个最后的竞争者:带有 SQLiteJDBC“纯 Java”驱动程序的 SQLite 与 Java DB(又名 Derby)。

这是我的杀手锏标准:应用程序必须在任何支持 Java 的操作系统上运行,特别是我们有 Solaris、CentOS、Windows x86 和 Windows x64 主机,它们都需要运行该应用程序。并且安装必须只涉及将war文件复制到目标服务器的部署文件夹并让服务器完成其余工作(这只不过是将zip复制到目标服务器,然后让服务器解压缩并运行应用程序)。作为安装的一部分,不应该使用原生二进制文件,也没有额外的设置逻辑。(这实际上不是我的要求,这是公司对所有基于 servlet 的应用程序的要求,但我确实喜欢它)。

我知道 Derby (Java DB) 符合上述标准。我已经做过一两次了。但我真的很喜欢 SQLite 的单文件架构以及 SQLite 社区比 Derby 大 20 倍的事实。我还担心甲骨文总有一天会杀死德比,因为他们现在有五种相互竞争的数据库产品,而且这种情况不可能永远持续下去。当家政开始时,德比可能是第一个受害者。

所以,我在看 SQLiteJDBC,它声称有用于 SQLite 的“纯 Java”JDBC 驱动程序。现在,我将“纯 Java”理解为意味着没有操作系统依赖项或其他库,可以在任何操作系统上的任何 JVM 中运行驱动程序。所以,我去获取带有纯 Java 驱动程序的 jar 文件。作为一个好奇的人,我在里面看看。然后我注意到它在根目录中包含 4 个带有“.lib”扩展名的文件,如下所示:

linux-amd64.lib
linux-x86.lib
mac-universal.lib
win-x86.lib

好吧,那是怎么回事?这些是否像命名操作系统的本机库?如果是这样,我可以假设这个纯 Java 驱动程序只能在 jar 中有适当的 lib 文件的平台上运行吗?如果是这样的话,我遗憾地将 SQLite 从竞争者名单中剔除,因为 winX64 和 Solaris 是我们这里最重要的两个操作系统。

或者也许我误解了,纯 Java 驱动程序真的是纯 Java,它可以在任何 JVM 上运行?

欢迎大家回复!!!

在此先感谢,约翰

4

2 回答 2

3

http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC - 提供纯 Java 实现,尽管它尽可能使用提供的 .lib 文件,因为它们更快。

于 2012-01-07T13:55:45.457 回答
2

如果我理解正确,SQLiteJDBC 本身是 Type 4 JDBC 驱动程序,但仍然需要与主机操作平台进行一些本机二进制集成,因为 SQLite 仍然是基于 C 的解决方案,并且没有像 SQL*Net for Oracle 这样的网络集成/协议层我所知道的。SQLiteJDBC 主页提到了 GCC 支持的任何语言的“NestedVM”实现,因此似乎可以在任何有 GCC 运行时环境的地方部署跨平台。然而,没有提到 Solaris。

于 2010-11-21T15:19:09.920 回答