SQLite JDBC 是用於在 Java 中存取和建立 SQLite 資料庫檔案的程式庫。
我們的 SQLiteJDBC 庫不需要配置,因為主要作業系統(包括 Windows、macOS、Linux 等)的本機庫被組裝到單一 JAR(Java 存檔)檔案中。
該項目已維護,但並未積極開發:
我們關注 SQLite 的每個新版本,並將發布相應版本的驅動程式。
將調查錯誤,並在可能的情況下修復。
新功能由拉取請求驅動。
該專案的當前維護者是 Gotson。
➡️更多使用範例和配置可以在USAGE.md中找到
SQLite JDBC 是一個透過 JDBC API 存取 SQLite 資料庫的函式庫。有關 JDBC 的一般用法,請參閱 JDBC 教學或 Oracle JDBC 文件。
下載sqlite-jdbc-3.47.1.0.jar
,然後將此 jar 檔案附加到類路徑中。
從程式碼開啟 SQLite 資料庫連線。 (見下面的例子)
假設sqlite-jdbc-3.47.1.0.jar
放置在目前目錄中。
> javac Sample.java
> java -classpath " .;sqlite-jdbc-3.47.1.0.jar " Sample # in Windows
or
> java -classpath " .:sqlite-jdbc-3.47.1.0.jar " Sample # in macOS or Linux
name = leo
id = 1
name = yui
id = 2
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 )
{
// NOTE: Connection and Statement are AutoCloseable.
// Don't forget to close them both in order to avoid leaks.
try
(
// create a database connection
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
e . printStackTrace ( System . err );
}
}
}
我們的 SQLite JDBC 驅動程式套件(即sqlite-jdbc-3.47.1.0.jar
)包含三種類型的本機 SQLite 函式庫( sqlitejdbc.dll
、 sqlitejdbc.dylib
、 sqlitejdbc.so
),每個函式庫都是針對Windows、Windows、 macOS 和Linux 編譯的。當您的程式載入org.sqlite.JDBC
驅動程式時,適當的本機程式庫檔案會自動提取到作業系統的暫存資料夾。
從 sqlite-jdbc-3.6.19 開始,本機編譯的 SQLite 引擎將用於下列作業系統:
x86 | x86_64 | ARMv5 | ARMv6 | ARMv7 | ARM64 | ppc64 | RISCV64 | |
---|---|---|---|---|---|---|---|---|
視窗 | ✔ | ✔ | ✔ | ✔ | ||||
macOS | ✔ | ✔ | ||||||
Linux(libc) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Linux(穆斯林) | ✔ | ✔ | ✔ | |||||
Android(API 等級 24+) | ✔ | ✔ | ✔ | ✔ | ||||
自由BSD | ✔ | ✔ | ✔ |
上面未列出的其他作業系統均使用純java SQLite。 (適用於3.7.15之前的版本)
如果您想使用適用於您的作業系統的本機庫,請從頭開始建立原始程式碼。
從版本 3.40.1.0 開始,Sqlite JDBC 開箱即用支援 GraalVM 本機映像。在此之前,已經對某些版本提供了基本支持,但 CI 並未對此進行積極測試。
預設情況下,編譯目標的sqlitejdbc
庫將包含在本機映像中,並附有所需的 JNI 配置。在運行時,該庫將被提取到臨時資料夾並從那裡加載。但是,為了更快啟動,建議在建置時設定org.sqlite.lib.exportPath
屬性。這將在建置時將sqlitejdbc
庫匯出到指定目錄,並且該庫不會作為資源包含在內。因此,原生鏡像本身會稍微小一些,並且消除了運行時導出庫的開銷,但您需要確保可以在運行時找到該庫。執行此操作的最佳方法是將庫放置在可執行檔旁邊。
native-image -Dorg.sqlite.lib.exportPath= ~ /outDir -H:Path= ~ /outDir -cp foo.jar org.example.Main
這會將sqlitejdbc
共享庫和本機映像輸出放置在~/outDir
資料夾中。
此範例使用 native-build-tools maven 外掛程式:
< plugin >
< groupId >org.graalvm.buildtools</ groupId >
< artifactId >native-maven-plugin</ artifactId >
< configuration >
< buildArgs >
< buildArg >-Dorg.sqlite.lib.exportPath=${project.build.directory}</ buildArg >
</ buildArgs >
</ configuration >
</ plugin >
這將自動將sqlitejdbc
庫放置在專案的/target
資料夾中,建立一個功能執行環境。打包產生的應用程式時,只需將庫包含在分發包中即可。
從 Maven Central 或發布頁面下載。
< dependencies >
< dependency >
< groupId >org.xerial</ groupId >
< artifactId >sqlite-jdbc</ artifactId >
< version >3.47.1.0</ version >
</ dependency >
</ dependencies >
開發版本的快照可在 Sonatype 的快照儲存庫中找到。
Maven Central 資源使用 GPG 進行簽名,並且以 .asc 結尾的簽名檔案可在與其他下載相同的位置取得。
以下密鑰目前用於簽署版本:
-----開始 PGP 公鑰區塊----- 評論:C1CB A75E C9BD 0BAF 8061 9354 59E0 5CE6 1818 7ED4 評論:Taro L. Saito(對於 GitHub Actions)<[email protected]> xjMEYuRVGhYJKwYBBAHARw8BAQdA2Dp4m1Yhtb1g94pQzzL24FuP6b9KXF8lP9Dh hZnynhfNM1Rhcm8gTC4gU2FpdG8gKEZvciBHaXRIdWIgQWN0aW9ucykgPGxlb0B4 ZXJpYWwub3JnPsKUBBMWCgA8FiEEwcunXsm9C6+AYZNUWeBc5hgYftQFAmLkVRoC GwMFCwkIBwIDIGIBBhUKCQgLAgQWAgMBAh4HAheAAAoJEFngXOYYGH7UfPwBAK7x TVRebZeWcAwmGaMUsbg7SgJou8xnkhByObPLUC/4AQDPsZeYmi4KXyXPzmqhCICD Y+ZSJWIDQqitK2ujPDFXA844BGLkVRoSCisGAQQBl1UBBQEBB0Atu9kejBi+6wfO T0a9z/LYEEdNXM/VX6xt1onKToPPdQMBCAfCeAQYFgoAIBYhBMHLp17JvQuvgGGT VFngXOYYGH7UBQJi5FUaAhsMAAoJEFngXOYYGH7UlMABAKyRCazhVyUFg5FOpanm ckBY38CaMGPPLXVyY8Kr6dYFAP9wYLu7nsDZCOXkAgS+et4Pk1WZCggoYUkxsX1o 0KZXBQ== =懷亞斯 -----PGP 公鑰區塊結束-----
項目的版本遵循 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 >3.47.1.0</ version >
</ dependency >
我們一直在尋找:
問題或 PR 的審閱者,您可以查看
貢獻者提交PR,可以查看和
請閱讀我們的貢獻指南。