Java和SQLite

我被单个文件数据库所提供的简洁所吸引。在Java中连接和使用SQLite的驱动程序/连接器库是什么?

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

314346 次浏览

维基列出了更多的包装器:

我在用SQLite和Java搜索信息时发现了你的问题。我只是想把我的答案添加到我的博客上。

我已经用Java编程有一段时间了。我也知道SQLite,但从未使用过它……嗯,我通过其他应用程序使用过它,但从未在我编码的应用程序中使用过。所以这周我的一个项目需要它,它是如此简单的使用!

我找到了一个用于SQLite的Java JDBC驱动程序。只需将JAR文件添加到类路径中,并导入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();
}
}

我知道你特别问了SQLite,但也许HSQL数据库更适合Java。它本身是用Java编写的,运行在JVM中,支持内存表等,所有这些特性都使它非常适合原型设计和单元测试。

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

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

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

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

注意“。jar”后面的分号,我希望这能帮助到大家,可能会给大家带来很多麻烦

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

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


java -classpath .;sqlitejdbc-v056.jar Text

请注意“。”和“分隔”;(赢了,Linux是“:)”)

David Crawshaw项目(sqlitejdbc-v056.jar)似乎过时了,最近一次更新是2009年6月20日,源在这里

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

使用与伯尼的回答相同的语法,并且速度更快,并且使用了最新的sqlite库。

与Zentus的SQLite JDBC有什么不同?

Zentus的原始SQLite JDBC驱动程序 http://www.zentus.com/sqlitejdbc/本身是一个很好的实用程序 使用来自Java语言的SQLite数据库,以及我们的SQLiteJDBC库 也依赖于它的实现。然而,它的纯java版本, 它完全将c/c++代码的SQLite转换成Java,是吗 与使用SQLite的本机版本相比,速度明显较慢 为每个操作系统(win, mac, linux)编译二进制文件 要使用sqlite-jdbc的本机版本,用户必须设置到的路径 本机代码(dll, jnilib, so文件,这是JNDI C程序)由 使用命令行参数,例如-Djava.library。路径= dll, jnilib等),或- dogg .sqlite.lib。路径等。这个过程是 告诉每个用户设置这些变量容易出错,而且很麻烦。 我们的SQLiteJDBC库完全消除了这些不便 另一个区别是我们保留了这个SQLiteJDBC库 最新到最新版本的SQLite引擎,因为我们是一个 这个库的最热门用户。例如,SQLite JDBC是一个 UTGB(东京大学基因组浏览器)工具包核心组件 这是我们创建个性化基因组浏览器的工具。

编辑:像往常一样,当你更新一些东西时,在你的代码中一些模糊的地方会有问题(发生在我身上)。测试测试测试=)

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

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

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