题
我被单个文件数据库提供的整洁所吸引。有哪些驱动程序/连接器库可以通过 Java 连接和使用 SQLite。
我发现了一个包装库, http://www.ch-werner.de/javasqlite, ,但是还有其他更突出的项目吗?
解决方案
这 维基百科 列出了更多包装器:
- Java 包装器(围绕 SWIG 接口): http://tk-software.home.comcast.net/
- 使用 SQLite 的 JDBC 驱动程序的好教程。(至少它有效!) http://www.ci.uchicago.edu/wiki/bin/view/VDS/VDSDevelopment/UsingSQLite
- 跨平台 JDBC 驱动程序,在 Windows、Linux、OS X 上使用嵌入式本机 SQLite 库,并在其他操作系统上回退到纯 Java 实现: https://github.com/xerial/sqlite-jdbc (以前 泽图斯)
- 另一个 Java - SWIG 包装器。它仅适用于 Win32。 http://rodolfo_3.tripod.com/index.html
- sqlite-java-shell:使用 NestedVM 构建的 sqlite3 命令行 shell 的 100% 纯 Java 端口。(这不是 JDBC 驱动程序)。
- Mysaifu JVM 的 SQLite JDBC 驱动程序:适用于 Mysaifu JVM 的 SQLite JDBC 驱动程序以及适用于 Windows (x86) 和 Linux (i386/PowerPC) 的 SQLite JNI 库。
其他提示
我在搜索信息时发现了你的问题 SQLite 和爪哇。只是想我会添加我的答案,我也将其发布在我的 博客.
我用 Java 编码已经有一段时间了。我也知道 SQLite 但从未使用过它......好吧我通过其他方式使用过它 应用 但从来没有在我编写的应用程序中出现过。所以这周我的一个项目需要它,而且它的使用非常简单!
我找到了 SQLite 的 Java JDBC 驱动程序。只需添加 JAR文件 到您的类路径并导入 java.sql.*
他的测试应用程序将创建一个数据库文件,发送一些 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();
}
}
我知道您具体询问了 SQLite,但也许 HSQL数据库 会更适合Java。它是用 Java 本身编写的,在 JVM 中运行,支持内存表等。所有这些功能使其非常适合原型设计和单元测试。
有一个新项目 SQLJet 这是 SQLite 的纯 Java 实现。它还不支持所有 SQLite 功能,但对于某些使用 SQLite 数据库的 Java 项目来说可能是一个非常好的选择。
David Crawshaw 项目(sqlitejdbc-v056.jar)似乎已过时,最后更新时间为 2009 年 6 月 20 日, 来源在这里
我会推荐 西力前叉 Crawshaw sqlite 包装器。我用 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,它使用了为每个OS编译的SQLite二进制版本(Win,Mac,Linux)。
要使用SQLite-JDBC的本机版本,用户必须通过使用命令行参数,例如,-djava.library.path = (通往dll,jnilib等的路径)或-dorg.sqlite.lib.path等。这个过程容易出错,并且很麻烦,可以告诉每个用户设置这些变量。我们的 SQLiteJDBC 库完全消除了这些不便。
另一个区别是,我们将此SQLiteJDBC库最新到最新版本的SQLite Engine,因为我们是该库中最热门的用户之一。例如,SQLite JDBC是UTGB(东京大学基因组浏览器)工具包的核心组成部分,这是我们创建个性化基因组浏览器的实用性。
编辑 :像往常一样,当你更新某些内容时,代码中某个不起眼的地方会出现问题(发生在我身上)。测试测试测试=)
伯尼的帖子非常有帮助。无法投票(没有足够的声誉:( )。但它有很大帮助。只是重申一下!
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 干杯:)
当您编译并运行代码时,您应该设置类路径选项值。就像下面这样:
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”后面的分号,我希望对人们有帮助,可能会引起很多麻烦