【问题标题】:Is SQLite the most appropriate thing to use for an embedded database? [duplicate]SQLite 是最适合用于嵌入式数据库的东西吗? [复制]
【发布时间】:2012-07-23 06:23:33
【问题描述】:

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

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

  • 我拒绝 MySQL,因为它需要一个服务器。
  • 我对 XML 说不,因为真的有很多数据需要保存和操作。

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

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

  • Wrapper 和 Driver 有什么区别?
  • 另外,我看到存在“纯 Java 实现”:SQLJet 或多或少经过优化?
  • 最后你会在我的情况下使用什么?

【问题讨论】:

  • 另见 HSQLDB 和其他嵌入式 Java dbs

标签: java sqlite h2


【解决方案1】:

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

sqlite 对服务器不需要任何要求?

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

只需安装最终的应用程序,sqlite 在我的应用程序中就可以正常工作了吗?

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

Wrapper 和 Driver 有什么区别?

取决于使用情况。我认为 Sqlite 是在谈论这样一个事实,即当您为 Sqlite 使用 JDBC 驱动程序时,它实际上是在驱动程序内部包装了 Sqlite C 本机库。通常,JDBC 驱动程序与远程数据库通信。

H2 也是这种方式,“驱动程序”实际上执行数据库操作,只是它是用 Java 编写的,因此您不需要 C 包装器。

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

这是我第一次听说 Sqljet,所以我不确定。 Xerial Sqlite driver 是我用过的,它的性能似乎不错。

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

我自己会使用 H2 来实现原生 Java 功能。

【讨论】:

  • “Xerial 驱动程序实际上是在一个小型 VM 中模拟 Sqlite C 代码 - 很奇怪,但它似乎运行良好” - 真的?据我所知,它现在没有这样做。你写的时候是这样的吗?
  • 我不确定我从哪里得到@TomAnderson,但我找不到任何引用它的东西,所以也许我当时头部受伤。我已经编辑了该部分。感谢您的回击。
  • 哦,真可惜。我希望他们过去有一些惊人的实现!
【解决方案2】:
  1. 是的,SQLite 不需要服务器。

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

  3. Wrapper 是一个程序,它允许您通过不同的接口访问另一个程序的功能,从而构成另一个程序的外观。例如,eclipse 将我们在日常开发中使用的许多 java 程序“包装”在一个方便的 GUI 中。而驱动程序是启动现有应用程序所需的程序。例如,在 Java 应用程序中,我们可能有一个主类,可以将其视为应用程序入口点的驱动程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-29
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    相关资源
    最近更新 更多