我正在决定在即将推出的 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 上运行?
欢迎大家回复!!!
在此先感谢,约翰