代码之家  ›  专栏  ›  技术社区  ›  Scott Bennett-McLeish

Java和SQLite [关闭]

  •  317
  • Scott Bennett-McLeish  · 技术社区  · 17 年前

    我被单个文件数据库提供的整洁所吸引。什么驱动/连接器库在那里连接和使用SQLite与Java。

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

    10 回复  |  直到 9 年前
        1
  •  193
  •   Display Name    11 年前

    这个 wiki 列出更多包装:

        2
  •  241
  •   Rolf ツ    9 年前

    我在搜索信息时发现了你的问题 SQLite 和Java。我想我会加上我的答案,我也在我的 blog .

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

    我为SQLite找到了一个JavaJDBC驱动程序。只需添加 JAR file 到您的类路径并导入java.

    他的测试应用程序将创建一个数据库文件,发送一些SQL命令来创建一个表,在表中存储一些数据,然后将其读回并显示在控制台上。它将创建 测试数据库 文件位于项目的根目录中。您可以使用 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
  •  29
  •   javashlook    17 年前

    我知道你特别问过sqlite,但也许 HSQL database 会更好地适应Java。它是用Java编写的,运行在JVM中,支持内存表等等,所有这些特性使得它非常适合于原型和单元测试。

        4
  •  16
  •   Alex    16 年前

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

        5
  •  16
  •   Community Mohan Dere    9 年前

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

    我建议你 Xerials fork crawshaw sqlite包装。我用xerials sqlite-jdbc-3.7.2.jar文件替换了sqlite jdbc-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=(指向 dll、jnilib等)或-dorg.sqlite.lib.path等。此进程是 容易出错,让每个用户设置这些变量很麻烦。 我们的sqlitejdbc库完全消除了这些不便。

    另一个区别是我们保留了这个sqlitejdbc库 最新版本的sqlite引擎,因为我们是 这个图书馆最热门的用户。例如,sqlite jdbc是 东京大学基因组浏览器工具包的核心组件, 这是我们创建个性化基因组浏览器的实用程序。

    编辑 :和往常一样,当您更新某些内容时,您的代码中的某个模糊位置将出现问题(发生在我身上)。测试测试测试=)

        6
  •  5
  •   Srinivas    15 年前

    伯尼的职位很有帮助。无法投票(没有足够的声誉:()。但它帮助了很多。只是重申一下!

    http://www.zentus.com/sqlitejdbc/

    您可以在这里找到最新的sqlite jdbc jar。只需将jar添加到类路径中,就完成了!:)您可以运行Bernie的示例代码来测试是否一切正常。

    http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html http://www.sqlite.org/lang.html

    在这里,您可以找到有关SQLite的SQL语法的一些帮助。 为SQLite干杯:)

        7
  •  3
  •   aboutstudy    14 年前

    编译和运行代码时,应该设置classpath选项值。 如下所示:

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

    请注意“.”和sparate”;(win,linux是“:”)

        8
  •  3
  •   Morbo    13 年前

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

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

    注意:makefile需要curl binary来下载sqlite库/deps。

        9
  •  2
  •   Donal Fellows    14 年前

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

        10
  •  0
  •   Mark Hall    14 年前

    Typo: java -cp .:sqlitejdbc-v056.jar Test

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

    注意“.jar”后面的分号。我希望它能帮助人们,会引起很多麻烦。