我被单个文件数据库提供的整洁所吸引。有什么驱动程序/连接器库可以将 SQLite 与 Java 连接和使用。
我发现了一个包装库http://www.ch-werner.de/javasqlite,但是还有其他更突出的项目吗?
我被单个文件数据库提供的整洁所吸引。有什么驱动程序/连接器库可以将 SQLite 与 Java 连接和使用。
我发现了一个包装库http://www.ch-werner.de/javasqlite,但是还有其他更突出的项目吗?
我在使用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();
}
}
wiki列出了更多包装器:
我了解您专门询问了 SQLite,但也许HSQL 数据库更适合 Java。它是用 Java 本身编写的,在 JVM 中运行,支持内存表等,所有这些特性使它非常适用于原型设计和单元测试。
David Crawshaw 项目(sqlitejdbc-v056.jar)似乎过时了,最后一次更新是 2009 年 6 月 20 日, 来源在这里
我会推荐Crawshaw sqlite 包装器的Xerials fork。我用 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 版本,完全将 SQLite 的 c/c++ 代码翻译成 Java,与使用为每个操作系统(win、mac、linux)编译的 SQLite 二进制文件的本机版本相比要慢得多。
要使用本地版本的 sqlite-jdbc,用户必须使用命令行参数设置本地代码(dll、jnilib、so 文件,它们是 JNDI C 程序)的路径,例如,-Djava.library.path= (dll、jnilib 等的路径)或 -Dorg.sqlite.lib.path 等。这个过程很容易出错,而且告诉每个用户设置这些变量很麻烦。我们的 SQLiteJDBC 库完全消除了这些不便。
另一个不同之处是我们将这个 SQLiteJDBC 库保持在最新版本的 SQLite 引擎上,因为我们是这个库最热门的用户之一。例如,SQLite JDBC 是 UTGB(东京大学基因组浏览器)工具包的核心组件,它是我们创建个性化基因组浏览器的实用工具。
编辑:像往常一样,当你更新一些东西时,你的代码中一些不起眼的地方会出现问题(发生在我身上)。测试测试测试=)
有一个新项目SQLJet,它是 SQLite 的纯 Java 实现。它还不支持所有的 SQLite 特性,但对于一些使用 SQLite 数据库的 Java 项目来说可能是一个很好的选择。
当您编译和运行代码时,您应该设置类路径选项值。就像下面这样:
javac -classpath .;sqlitejdbc-v056.jar Text.java
java -classpath .;sqlitejdbc-v056.jar Text
请注意“。” 和单独的“;”(win,linux是“:”)
sqlitejdbc 代码可以使用 git 从https://github.com/crawshaw/sqlitejdbc下载。
# git clone https://github.com/crawshaw/sqlitejdbc.git sqlitejdbc
...
# cd sqlitejdbc
# make
注意:Makefile 需要 curl 二进制文件才能下载 sqlite 库/deps。
示例代码导致 Tomcat 中的内存泄漏(在取消部署 webapp 后,类加载器仍保留在内存中),这将导致outofmemory
最终。解决方法是使用sqlite-jdbc-3.7.8.jar;这是一个快照,所以它还没有出现在 Maven 中。
错字:java -cp .:sqlitejdbc-v056.jar Test
应该:java -cp .:sqlitejdbc-v056.jar; Test
注意“.jar”后面的分号我希望对人们有所帮助,可能会造成很多麻烦