用于Java的可嵌入“非JDBC”SQL数据库

时间:2013-06-13 14:56:30

标签: java sql database jdbc

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

如果是纯粹的java,则获得积分。

3 个答案:

答案 0 :(得分:5)

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

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

Derby是DB2的Java版本。它使用起来有点笨拙,但已经准备好投入生产。

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

编辑 H2支持IF NOT EXISTS以及许多其他有用的功能。请注意,这样的事情不是JDBC的一部分。 JDBC只是将字符串发送到数据库。但每个数据库都有自己的SQL方言和自己的功能集; JDBC无法做到这一点。

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

答案 1 :(得分: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);

答案 2 :(得分:0)

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

它包含适用于Mac OS X,Windows,Linux和Android的二进制文件。