我需要构建一个我将在Linux服务器上安装的Java应用程序。
当人们安装时,他们只需安装此应用程序,启动它,仅此而已。但我们有一些数据需要保存。
所以我在看SQLite,这是我认为最好的。确实(如果我错了就阻止我),SQLite不需要任何服务器? (只需安装最终的应用程序,SQLite在我的应用程序中工作正常吗?)
然后我在http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers检查了一下,我真的有点困惑。
答案 0 :(得分:17)
要考虑的另一个数据库是H2。它是一个完全用Java编写的嵌入式数据库引擎,因此您可以获得Sqlite 不所具有的完整unicode(16位)字符支持。其他嵌入式数据库是HSQLDB和Derby。
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)
是的SQLite不需要服务器。
一个非常简单的开发解决方案是使用SQLLite将其嵌入到源代码中,并使用一些存根数据。然后,您可以将数据库提交到您的版本控制系统(即我使用github,它非常容易这样做)作为单个文件。显然,这不是一个好的生产方法,但它是创建单个开发版本的好方法。
Wrapper是一个程序,它通过允许您通过不同的界面访问其功能来使其他程序。例如,eclipse在一个方便的GUI中“包装”了我们在日常开发中使用的许多java程序。而驱动程序是启动现有应用程序所需的程序。例如,在java应用程序中,我们可能有一个主类可以被认为是应用程序入口点的驱动程序。