【问题标题】:Java and SQLite [closed]Java 和 SQLite [关闭]
【发布时间】:2010-09-07 15:51:36
【问题描述】:

我被单一文件数据库提供的整洁所吸引。有什么驱动程序/连接器库可以将 SQLite 与 Java 连接和使用。

我发现了一个包装库 http://www.ch-werner.de/javasqlite,但还有其他更出色的项目吗?

【问题讨论】:

    标签: java sqlite


    【解决方案1】:

    wiki 列出了更多包装器:

    【讨论】:

    【解决方案2】:

    我在使用 SQLite 和 Java 搜索信息时发现了您的问题。只是想我会添加我的答案,我也发布在我的blog

    我用 Java 编码已经有一段时间了。我也知道 SQLite,但从未使用过它……好吧,我已经通过其他 applications 使用过它,但从未在我编写的应用程序中使用过它。所以这周我需要它来做一个项目,而且使用起来非常简单!

    我找到了一个用于 SQLite 的 Java JDBC 驱动程序。只需将 JAR file 添加到您的类路径并导入 java.sql.*

    他的测试应用程序将创建一个数据库文件,发送一些 SQL 命令来创建一个表,将一些数据存储在表中,并将其读回并显示在控制台上。它将在项目的根目录中创建 test.db 文件。您可以使用java -cp .:sqlitejdbc-v056.jar Test 运行此示例。

    package com.rungeek.sqlite;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    public class Test {
        public static void main(String[] args) throws Exception {
            Class.forName("org.sqlite.JDBC");
            Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
            Statement stat = conn.createStatement();
            stat.executeUpdate("drop table if exists people;");
            stat.executeUpdate("create table people (name, occupation);");
            PreparedStatement prep = conn.prepareStatement(
                "insert into people values (?, ?);");
    
            prep.setString(1, "Gandhi");
            prep.setString(2, "politics");
            prep.addBatch();
            prep.setString(1, "Turing");
            prep.setString(2, "computers");
            prep.addBatch();
            prep.setString(1, "Wittgenstein");
            prep.setString(2, "smartypants");
            prep.addBatch();
    
            conn.setAutoCommit(false);
            prep.executeBatch();
            conn.setAutoCommit(true);
    
            ResultSet rs = stat.executeQuery("select * from people;");
            while (rs.next()) {
                System.out.println("name = " + rs.getString("name"));
                System.out.println("job = " + rs.getString("occupation"));
            }
            rs.close();
            conn.close();
        }
      }
    

    【讨论】:

    【解决方案3】:

    我了解您专门询问了 SQLite,但也许 HSQL database 更适合 Java。它是用 Java 本身编写的,在 JVM 中运行,支持内存表等,所有这些特性使它非常适用于原型设计和单元测试。

    【讨论】:

    • 是的 HSQL 是一个非常好的选择,我已经在几个客户端应用程序中广泛使用它以获得良好的效果。然而,在这种情况下,我确实想使用 SQLite。
    【解决方案4】:

    有一个新项目SQLJet 是 SQLite 的纯 Java 实现。它还不支持所有 SQLite 功能,但对于一些使用 SQLite 数据库的 Java 项目来说可能是一个很好的选择。

    【讨论】:

    • 它看起来很有希望,但它似乎还没有提供 SQL 查询功能,对我来说有点破坏交易。
    • 仍然不支持 SQL 查询,而是支持较低级别的 API。
    • 对于只需要生成 SQLite文件的应用程序仍然非常有用,即不需要SQL来查询数据。
    【解决方案5】:

    示例代码导致 Tomcat 中的内存泄漏(取消部署 webapp 后,类加载器仍保留在内存中),最终将导致 outofmemory。解决方法是使用sqlite-jdbc-3.7.8.jar;这是一个快照,所以它还没有出现在 maven 中。

    【讨论】:

      【解决方案6】:

      错字:java -cp .:sqlitejdbc-v056.jar Test

      应该是:java -cp .:sqlitejdbc-v056.jar; Test

      注意“.jar”后面的分号,希望对大家有所帮助,可能会造成很多麻烦

      【讨论】:

      • 想详细说明一下?在 *nix 上;会将 java 与 Test 命令分开(因此会产生错误)。在 Windows 上 : 不能用作 cp 分隔符。所以总而言之.:xxx.jar; 没有意义。而且你还需要指定Test类的包名。
      【解决方案7】:

      当您编译和运行代码时,您应该设置类路径选项值。 就像下面这样:

      javac -classpath .;sqlitejdbc-v056.jar Text.java
      
      java -classpath .;sqlitejdbc-v056.jar Text
      

      请注意“。”和单独的“;”(win,linux是“:”)

      【讨论】:

        【解决方案8】:

        David Crawshaw 项目(sqlitejdbc-v056.jar) 似乎已过时,最后一次更新是 2009 年 6 月 20 日,source here

        我会推荐 Crawshaw sqlite 包装器的 Xerials fork。我用 Xerials sqlite-jdbc-3.7.2.jar 文件替换了 sqlitejdbc-v056.jar 没有任何问题。

        使用与Bernie's answer 相同的语法,并且速度更快,并且使用最新的 sqlite 库。

        与 Zentus 的 SQLite JDBC 有什么不同?

        原始 Zentus 的 SQLite JDBC 驱动程序 http://www.zentus.com/sqlitejdbc/ 本身就是一个很好的实用程序 使用来自 Java 语言的 SQLite 数据库和我们的 SQLiteJDBC 库 也依赖于它的实现。但是,它的纯 java 版本, 将 SQLite 的 c/c++ 代码完全翻译成 Java,是 与使用 SQLite 的本机版本相比,速度要慢得多 为每个操作系统(win、mac、linux)编译的二进制文件。

        要使用原生版本的 sqlite-jdbc,用户必须设置一个路径 本机代码(dll、jnilib、so 文件,它们是 JNDI C 程序)由 使用命令行参数,例如 -Djava.library.path=(path to the dll、jnilib 等),或 -Dorg.sqlite.lib.path 等。这个过程是 告诉每个用户设置这些变量容易出错且麻烦。 我们的 SQLiteJDBC 库完全消除了这些不便。

        另一个区别是我们保留了这个 SQLiteJDBC 库 更新到最新版本的 SQLite 引擎,因为我们是其中之一 这个图书馆最热门的用户。例如,SQLite JDBC 是一个 UTGB(东京大学基因组浏览器)工具包的核心组件, 这是我们创建个性化基因组浏览器的实用程序。

        EDIT :像往常一样,当您更新某些内容时,您的代码中某些不起眼的地方会出现问题(发生在我身上)。测试测试测试=)

        【讨论】:

        • sqlite-jdbc 项目很棒,但请注意它是Apache licensed。因此,如果您使用它,无论您的代码是 FOSS 还是专有代码,都必须注明出处。
        【解决方案9】:

        sqlitejdbc 代码可以使用 git 从https://github.com/crawshaw/sqlitejdbc 下载。

        # git clone https://github.com/crawshaw/sqlitejdbc.git sqlitejdbc
        ...
        # cd sqlitejdbc
        # make
        

        注意:Makefile 需要 curl 二进制文件才能下载 sqlite 库/deps。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-07
          • 1970-01-01
          • 2014-05-07
          • 1970-01-01
          • 1970-01-01
          • 2020-12-17
          • 2016-02-05
          • 1970-01-01
          相关资源
          最近更新 更多