SQLite JDBC 是一个用于在 Java 中访问和创建 SQLite 数据库文件的库。
我们的 SQLiteJDBC 库无需任何配置,因为包括 Windows、macOS、Linux 等主要操作系统的原生库都被组装到一个 JAR(Java 归档)文件中。
➡️ 更多用法示例和配置请参阅 USAGE.md
SQLite JDBC 是一个通过 JDBC API 访问 SQLite 数据库的库。有关 JDBC 的一般用法,请参阅 JDBC 教程 或 Oracle JDBC 文档。
sqlite-jdbc-(VERSION).jar,然后将此 jar 文件添加到你的 classpath 中。假设 sqlite-jdbc-(VERSION).jar 位于当前目录中。
> javac Sample.java
> java -classpath ".;sqlite-jdbc-(VERSION).jar" Sample # in Windows
or
> java -classpath ".:sqlite-jdbc-(VERSION).jar" Sample # in macOS or Linux
name = leo
id = 1
name = yui
id = 2
Sample.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Sample
{
public static void main(String[] args)
{
Connection connection = null;
try
{
// create a database connection
connection = DriverManager.getConnection("jdbc:sqlite:sample.db");
Statement statement = connection.createStatement();
statement.setQueryTimeout(30); // set timeout to 30 sec.
statement.executeUpdate("drop table if exists person");
statement.executeUpdate("create table person (id integer, name string)");
statement.executeUpdate("insert into person values(1, 'leo')");
statement.executeUpdate("insert into person values(2, 'yui')");
ResultSet rs = statement.executeQuery("select * from person");
while(rs.next())
{
// read the result set
System.out.println("name = " + rs.getString("name"));
System.out.println("id = " + rs.getInt("id"));
}
}
catch(SQLException e)
{
// if the error message is "out of memory",
// it probably means no database file is found
System.err.println(e.getMessage());
}
finally
{
try
{
if(connection != null)
connection.close();
}
catch(SQLException e)
{
// connection close failed.
System.err.println(e.getMessage());
}
}
}
}
我们的 SQLite JDBC 驱动包(即 sqlite-jdbc-(VERSION).jar)包含三种类型的 SQLite 原生库(sqlite-jdbc.dll、sqlite-jdbc.jnilib、sqlite-jdbc.so),它们分别针对 Windows、macOS 和 Linux 编译。当你的程序加载 org.sqlite.JDBC 驱动时,合适的原生库文件会自动解压到你的操作系统临时文件夹中。
自 sqlite-jdbc-3.6.19 起,以下操作系统将使用原生编译的 SQLite 引擎:
| x86 | x86_64 | armv5 | armv6 | armv7 | arm64 | ppc64 | |
|---|---|---|---|---|---|---|---|
| Windows | ✔ | ✔ | ✔ | ✔ | |||
| macOS | ✔ | ✔ | |||||
| Linux (libc) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| Linux (musl) | ✔ | ✔ | ✔ | ||||
| Android | ✔ | ✔ | ✔ | ✔ | |||
| FreeBSD | ✔ | ✔ | ✔ |
对于上述未列出的其他操作系统,将使用纯 Java 的 SQLite。(适用于 3.7.15 之前的版本)
如果你想为你的操作系统使用原生库,请从头构建源代码。
从 Maven Central 或 releases 页面下载。
<dependencies>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>(version)</version>
</dependency>
</dependencies>
开发版本的快照可在 Sonatype 的快照仓库 中获取。
项目的版本号与 jar 中捆绑的 SQLite 库版本号保持一致,并额外增加一位数字来表示项目的增量版本。
例如,如果 SQLite 版本为 3.39.2,则项目版本为 3.39.2.x,其中 x 从 0 开始,并且在每次不更改 SQLite 版本的发布中递增。
如果 SQLite 版本更新为 3.40.0,则项目版本将更新为 3.40.0.0。
你可能需要添加 shade 插件转换器来解决 No suitable driver found for jdbc:sqlite: 问题。
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/services/java.sql.Driver</resource>
</transformer>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>(version)</version>
</dependency>
我们一直在寻找:
请阅读我们的贡献指南。