SQLite最适合用于嵌入式数据库吗?

时间:2012-07-24 21:02:17

标签: java sqlite h2

我需要构建一个我将在Linux服务器上安装的Java应用程序。

当人们安装时,他们只需安装此应用程序,启动它,仅此而已。但我们有一些数据需要保存。

  • 我对MySQL说不,因为它需要服务器。
  • 我对XML说不,因为会有很多数据需要保存和操作。

所以我在看SQLite,这是我认为最好的。确实(如果我错了就阻止我),SQLite不需要任何服务器? (只需安装最终的应用程序,SQLite在我的应用程序中工作正常吗?)

然后我在http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers检查了一下,我真的有点困惑。

  • 包装器和驱动程序有什么区别?
  • 另外我看到存在“纯java实现”:SQLJet是或多或少优化的?
  • 最后你会在我的情况下使用什么?

2 个答案:

答案 0 :(得分:17)

要考虑的另一个数据库是H2。它是一个完全用Java编写的嵌入式数据库引擎,因此您可以获得Sqlite 所具有的完整unicode(16位)字符支持。其他嵌入式数据库是HSQLDBDerby

  

sqlite在服务器上不需要任何要求吗?

正确。它不是。 H2也没有。

  

只需安装最终的应用程序,sqlite在我的应用程序中运行正常吗?

正确。只要在WAR中包含Sqlite或H2(或将其解压缩到jar中),它就可以正常工作。

  

包装器和驱动程序有什么区别?

取决于使用情况。我认为Sqlite正在谈论这样一个事实:当你为Sqlite使用JDBC驱动程序时,它实际上是驱动程序里面的的Sqlite C代码的包装。通常,JDBC驱动程序与远程数据库通信。 Xerial驱动程序实际上是在一个小虚拟机中模拟Sqlite C代码 - 奇怪但似乎运行良好。

H2也是那种方式,“驱动程序”实际上只是用Java编写的数据库操作,所以你不需要C包装器。

  

另外我看到存在“纯java实现”:SQLJet是或多或少优化的?

这是我第一次听说过Sqljet,所以我不确定。 Xerial Sqlite driver是我用过的,它的表现似乎很好。

  

最后你会在我的情况下使用什么?

我自己使用H2来获取本机Java功能。

答案 1 :(得分:2)

  1. 是的SQLite不需要服务器。

  2. 一个非常简单的开发解决方案是使用SQLLite将其嵌入到源代码中,并使用一些存根数据。然后,您可以将数据库提交到您的版本控制系统(即我使用github,它非常容易这样做)作为单个文件。显然,这不是一个好的生产方法,但它是创建单个开发版本的好方法。

  3. Wrapper是一个程序,它通过允许您通过不同的界面访问其功能来使其他程序。例如,eclipse在一个方便的GUI中“包装”了我们在日常开发中使用的许多java程序。而驱动程序是启动现有应用程序所需的程序。例如,在java应用程序中,我们可能有一个主类可以被认为是应用程序入口点的驱动程序。