我正在为即将到来的Java servlet应用程序中的嵌入式数据库做出决定.我归结为两个最终竞争者:SQLite与SQLiteJDBC"纯Java"驱动程序与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中运行吗?
欢迎所有回复!
先谢谢你,约翰