纯Java SQLiteJDBC驱动程序真的很纯粹吗?

时间:2010-11-21 14:46:12

标签: sqlite sqlitejdbc

我正在为即将到来的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上运行吗?

欢迎所有回复!!!

提前致谢, 约翰

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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