1

是否有可嵌入的“非 JDBC”SQL 数据库?这也不需要在硬件上运行服务器(如 SQLite)。

如果它是纯 java 的,则加分。

4

3 回答 3

5

有几个:H2Derby(作为“Java DB”包含在 Java SDK 中)和HSQL

H2 相当稳定(但我不会将 1.3.x 用于生产代码)并且它可以模拟几乎任何其他 SQL 数据库(即它可以配置为接受 Oracle SQL 语法)。非常适合单元测试。

Derby 是 DB2 的 Java 版本。使用起来有点笨拙,但可以投入生产。

HSQLDB 是一种较旧的可嵌入纯 Java 数据库。在遇到 H2 之前,我经常使用它。

EDIT H2 支持IF NOT EXISTS和许多其他有用的功能。请注意,类似的东西不是 JDBC 的一部分。JDBC 只是将字符串发送到数据库。但是每个数据库都有自己的 SQL 方言和自己的功能集;JDBC 对此几乎无能为力。

如果您寻找使许多数据库行为相似的东西,您应该查看jOOQ。当您关心质量时,您也应该考虑这一点。

于 2013-06-13T14:58:57.127 回答
2

一个相当不错的数据库是SQLite我最近开始使用的。您可以在内存或磁盘上创建一个数据库,它不需要任何外部安装。

更新

@Chase,您似乎对 JDBC 查询有误解。唯一的区别是,您将查询放在字符串中。

这是一个使用 SQLite 的简单查询。

private String mSQL = "select count(1) from t\n";

private void foo()
{
    Connection con = getJDBCConnection();
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery(sql);

    while (rs.next())
    {
        int n = rs.getInt("anzahl");
        System.out.println(n);
    }
    stmt.close();
    con.close();
}

更新 2

如您所愿,这是一个带有 if 子句的表示例。实际的 create table 语句是在其他地方准备的,所以我只是发布了这一行来展示它是如何工作的。

statement.executeUpdate("drop table if exists "+oTablename);
于 2013-06-13T15:02:57.823 回答
0

Sqlite4Java是 SQLite 的免费 Java 包装器。它不是 JDBC 驱动程序。

它具有适用于 Mac OS X、Windows、Linux 和 Android 的二进制文件。

于 2013-06-13T15:36:51.627 回答