我被单文件数据库提供的整洁吸引。有哪些驱动程序/连接库可用于使用Java连接和使用SQLite。
我发现了一个包装库http://www.ch-werner.de/javasqlite,但是否还有其他更重要的项目可用?
我被单文件数据库提供的整洁吸引。有哪些驱动程序/连接库可用于使用Java连接和使用SQLite。
我发现了一个包装库http://www.ch-werner.de/javasqlite,但是否还有其他更重要的项目可用?
我在使用SQLite和Java搜索信息时发现了你的问题。我想添加我的答案,我也在我的博客上发布了。
我已经编写Java程序一段时间了。我也知道SQLite,但从未使用过...好吧,我已经通过其他应用程序使用它,但从未在我编写的应用程序中使用过。所以这个星期我需要它来完成一个项目,使用起来非常简单!
我找到了一个Java JDBC驱动程序,可以用于SQLite。只需将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包装器:
我知道你特别询问了SQLite,但也许HSQL数据库更适合Java。它本身是用Java编写的,在JVM中运行,支持内存表等功能。所有这些特性使得它非常适合原型设计和单元测试。
David Crawshaw的项目(sqlitejdbc-v056.jar)似乎已经过时,最后一次更新是2009年6月20日,源码在这里
我建议使用Xerial的分支代替Crawshaw的sqlite封装。我已经成功地将sqlitejdbc-v056.jar替换为Xerials的sqlite-jdbc-3.7.2.jar文件。
与Bernie的回答中相同的语法,并且速度更快,使用了最新的sqlite库。
与Zentus的SQLite JDBC有何不同?
UTGB(东京大学基因组浏览器)工具包的核心组件,是我们用来创建个性化基因组浏览器的实用程序。原始的Zentus SQLite JDBC驱动程序http://www.zentus.com/sqlitejdbc/本身是一个非常好用的工具,可以从Java语言中使用SQLite数据库,而我们的SQLiteJDBC库也依赖于其实现。然而,它的纯Java版本完全将SQLite的c/c++代码转换为Java,与其使用为每个操作系统编译的SQLite二进制文件的本机版本相比,速度显着较慢。
要使用sqlite-jdbc的本机版本,用户必须通过使用命令行参数设置本地代码的路径(dll、jnilib、so文件,这些是JNDI C程序),例如,-Djava.library.path=(dll、jnilib等的路径),或者-Dorg.sqlite.lib.path等。这个过程容易出错,并且让每个用户都设置这些变量很麻烦。我们的SQLiteJDBC库完全消除了这些不便。
另一个区别是,我们将这个SQLiteJDBC库保持最新的SQLite引擎版本,因为我们是这个库的最热门用户之一。例如,SQLite JDBC是一个...
编辑:通常更新时,代码中可能会出现一些隐蔽的问题(我也遇到过)。测试、测试、再测试!
有一个新项目SQLJet,它是SQLite的纯Java实现。它还不支持所有SQLite功能,但对于一些使用SQLite数据库的Java项目来说可能是一个非常好的选择。
可以使用git从https://github.com/crawshaw/sqlitejdbc下载sqlitejdbc代码。
# git clone https://github.com/crawshaw/sqlitejdbc.git sqlitejdbc
...
# cd sqlitejdbc
# make
当您编译和运行代码时,应设置类路径选项值。就像下面这样:
javac -classpath .;sqlitejdbc-v056.jar Text.java
java -classpath .;sqlitejdbc-v056.jar Text
示例代码会在Tomcat中导致内存泄漏(在卸载Web应用程序后,类加载器仍然保留在内存中),最终会导致outofmemory
。解决方法是使用sqlite-jdbc-3.7.8.jar;它是一个快照版本,所以尚未出现在maven中。
笔误:java -cp .:sqlitejdbc-v056.jar Test
应该是:java -cp .:sqlitejdbc-v056.jar; Test
请注意在“.jar”后面加上分号,希望这能帮助大家,否则可能会引起很多麻烦。
.:xxx.jar;
是没有意义的。你还需要指定Test类的包名。 - eckes