SQLite JDBC เป็นไลบรารีสำหรับการเข้าถึงและสร้างไฟล์ฐานข้อมูล SQLite ใน Java
ไลบรารี SQLiteJDBC ของเราไม่ต้องการการกำหนดค่า เนื่องจากไลบรารีดั้งเดิมสำหรับระบบปฏิบัติการหลัก รวมถึง Windows, macOS, Linux ฯลฯ ถูกประกอบเป็นไฟล์ JAR (Java Archive) ไฟล์เดียว
โครงการยังคงอยู่แต่ยังไม่ได้รับการพัฒนาอย่างแข็งขัน:
เราติดตาม SQLite เวอร์ชันใหม่ทุกเวอร์ชัน และจะออกเวอร์ชันไดรเวอร์ที่เกี่ยวข้องของเรา
ข้อบกพร่องจะได้รับการตรวจสอบและแก้ไขหากเป็นไปได้
คุณสมบัติใหม่ขับเคลื่อนโดยคำขอดึง
ผู้ดูแลโครงการคนปัจจุบันคือ gotson
➡️ ตัวอย่างการใช้งานและการกำหนดค่าเพิ่มเติมมีอยู่ใน USAGE.md
SQLite JDBC เป็นไลบรารีสำหรับการเข้าถึงฐานข้อมูล SQLite ผ่าน JDBC API สำหรับการใช้งานทั่วไปของ JDBC โปรดดูบทช่วยสอน JDBC หรือเอกสาร Oracle JDBC
ดาวน์โหลด sqlite-jdbc-3.47.1.0.jar
จากนั้นต่อท้ายไฟล์ jar นี้ใน classpath ของคุณ
เปิดการเชื่อมต่อฐานข้อมูล 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, macOS และ Linux . ไฟล์ไลบรารีเนทีฟที่เหมาะสมจะถูกแยกลงในโฟลเดอร์ชั่วคราวของระบบปฏิบัติการของคุณโดยอัตโนมัติ เมื่อโปรแกรมของคุณโหลดไดรเวอร์ org.sqlite.JDBC
ตั้งแต่ sqlite-jdbc-3.6.19 เอ็นจิ้น SQLite ที่คอมไพล์แล้วจะถูกใช้สำหรับระบบปฏิบัติการต่อไปนี้:
x86 | x86_64 | อาร์มv5 | อาร์มv6 | อาร์มv7 | อาร์ม64 | ppc64 | riscv64 | |
---|---|---|---|---|---|---|---|---|
หน้าต่าง | ||||||||
ระบบปฏิบัติการ macOS | ||||||||
ลินุกซ์ (libc) | ||||||||
ลินุกซ์ (musl) | ||||||||
ระบบปฏิบัติการ Android (API ระดับ 24+) | ||||||||
ฟรีBSD |
|
ในระบบปฏิบัติการอื่นๆ ที่ไม่ได้ระบุไว้ข้างต้น จะใช้ pure-java SQLite (ใช้กับเวอร์ชันก่อน 3.7.15)
หากคุณต้องการใช้ไลบรารีดั้งเดิมสำหรับระบบปฏิบัติการของคุณ ให้สร้างซอร์สตั้งแต่เริ่มต้น
Sqlite JDBC รองรับ GraalVM เนทีฟอิมเมจตั้งแต่เริ่มต้นตั้งแต่เวอร์ชัน 3.40.1.0 มีการสนับสนุนเบื้องต้นสำหรับบางเวอร์ชันก่อนหน้านั้น แต่ 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
ตัวอย่างนี้ใช้ปลั๊กอิน maven ของ Native-build-tools:
< 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 ทีวีRebZeWcAwmGaMUsbg7SgJou8xnkhByObPLUC/4AQDPsZeYmi4KXyXPzmqhCicd Y+ZSJWIDQqitK2ujPDFXA844BGLkVRoSCisGAQQBl1UBBQEBB0Atu9kejBi+6wfO T0a9z/LYEEdNXM/VX6xt1onKToPPdQMBCAfCeAQYFgoAIBYhBMHLp17JvQuvgGGT VFngXOYYGH7UBQJi5FUaAhsMAAoJEFngXOYYGH7UlMABAKyRCazhVyUFg5FOpAnm ckBY38CaMGPPLXVyY8Kr6dYFAP9wYLu7nsDZCOXkAgS+et4Pk1WZCggoYUkxsX1o 0KZXBQ== = ไวอาส -----END บล็อกคีย์สาธารณะ PGP-----
เวอร์ชันของโปรเจ็กต์เป็นไปตามเวอร์ชันของไลบรารี SQLite ที่รวมอยู่ใน Jar โดยมีตัวเลขพิเศษเพื่อแสดงการเพิ่มขึ้นของโปรเจ็กต์
ตัวอย่างเช่น หากเวอร์ชัน SQLite คือ 3.39.2
เวอร์ชันโปรเจ็กต์จะเป็น 3.39.2.x
โดยที่ x
เริ่มต้นที่ 0 และเพิ่มขึ้นทุกๆ รีลีสที่ไม่ได้เปลี่ยนเวอร์ชัน SQLite
หากเวอร์ชัน SQLite ได้รับการอัปเดตเป็น 3.40.0
เวอร์ชันของโครงการจะได้รับการอัปเดตเป็น 3.40.0.0
คุณอาจต้องเพิ่มตัวแปลงปลั๊กอินสีเพื่อแก้ปัญหา 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 คุณสามารถตรวจสอบได้
ผู้มีส่วนร่วม ในการส่ง PRs สามารถตรวจสอบได้ และ
โปรดอ่านคู่มือการมีส่วนร่วมของเรา