Java dan SQLite [ditutup]

333

Saya tertarik pada kerapian yang disediakan oleh satu file database. Apa perpustakaan driver / konektor di luar sana untuk menghubungkan dan menggunakan SQLite dengan Java.

Saya telah menemukan perpustakaan pembungkus, http://www.ch-werner.de/javasqlite , tetapi apakah ada proyek lain yang lebih menonjol tersedia?

Scott Bennett-McLeish
sumber
10
Saya suka bahwa pertanyaan dengan ratusan upvotes, dan jawaban yang memiliki ratusan upvotes, ditutup sebagai "di luar topik". Agak memalukan, lol
Andrew Koster

Jawaban:

196

The wiki daftar beberapa bungkus lagi:

Peter Hoffmann
sumber
7
Tambahan saya ke daftar ini adalah sqlite4java - code.google.com/p/sqlite4java - ini pembungkus (tanpa JDBC); dikompilasi untuk Windows, Mac, Linux. Ini mudah digunakan dan menerapkan beberapa kontrak untuk membantu pengembang menghindari penyalahgunaan SQLite.
sereda
7
sqlite4java terlihat menarik, tetapi mereka juga memiliki perbandingan yang bagus dari berbagai pembungkus di luar sana: code.google.com/p/sqlite4java/wiki/ComparisonToOtherWrappers
Scott Bennett-McLeish
1
@ Kdt masalah yang saya temukan dengan driver zentus adalah sepertinya tidak mendukung BLOB sama sekali
Martijn
12
@Martijn xerial.org/trac/Xerial/wiki/SQLiteJDBC adalah cabang dari driver zentus dan mendukung BLOB (ada tut singkat di situs mereka).
johnharris85
17
zentus.com/sqlitejdbc -> 404
m0skit0
247

Saya menemukan pertanyaan Anda saat mencari informasi dengan SQLite dan Java. Saya pikir saya akan menambahkan jawaban saya yang juga saya posting di blog saya .

Saya telah mengkode di Jawa untuk sementara waktu sekarang. Saya juga tahu tentang SQLite tetapi tidak pernah menggunakannya ... Yah saya telah menggunakannya melalui aplikasi lain tetapi tidak pernah dalam aplikasi yang saya kodekan. Jadi saya membutuhkannya untuk proyek minggu ini dan penggunaannya sangat sederhana!

Saya menemukan driver Java JDBC untuk SQLite. Cukup tambahkan file JAR ke classpath Anda dan impor java.sql. *

Aplikasi pengujiannya akan membuat file database, mengirim beberapa perintah SQL untuk membuat tabel, menyimpan beberapa data dalam tabel, dan membacanya kembali dan ditampilkan di konsol. Ini akan membuat file test.db di direktori root proyek. Anda dapat menjalankan contoh ini dengan 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();
    }
  }
Bernie Perez
sumber
1
Inilah sebabnya saya pikir Joel berbicara omong kosong (pembicaraan teknologi Google: youtube.com/watch?v=NWHfY_lvKIQ ) ketika mengatakan bahwa desain stackoverflow.com lebih baik karena semua posting "lama" berkeliaran di internet. Itu hanya pengulangan.
Nikolaos
26
Juga perhatikan bahwa proyek Crawshaw tampaknya hiatus, tetapi bercabang dan diperbarui di sini: xerial.org/trac/Xerial/wiki/SQLiteJDBC
lapo
8
zentus.com tampaknya rusak, temukan cermin di sini; priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/about.htm
Daniel Magnusson
3
Terima kasih @DanielMagnusson, Anda seorang penyelamat. Sementara pada topik, siapa pun yang masih mencari driver sqliteJDBC dapat membuka priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/… karena tautan tautan about.htm salah.
j Marcelz
2
maven dependency: mvnrepository.com/artifact/org.xerial/sqlite-jdbc
Carl Bosch
30

Saya mengerti Anda bertanya secara spesifik tentang SQLite, tapi mungkin basis data HSQL akan lebih cocok dengan Java. Itu ditulis dalam Java itu sendiri, berjalan di JVM, mendukung tabel dalam memori dll dan semua fitur membuatnya cukup dapat digunakan untuk prototyping dan pengujian unit.

javashlook
sumber
3
Ya HSQL adalah pilihan yang sangat baik dan saya telah menggunakannya cukup luas di beberapa aplikasi klien untuk efek yang baik. Namun dalam contoh ini, saya memang ingin menggunakan SQLite.
Scott Bennett-McLeish
18

Proyek David Crawshaw (sqlitejdbc-v056.jar) tampaknya sudah ketinggalan zaman dan pembaruan terakhir adalah 20 Juni 2009, sumber di sini

Saya akan merekomendasikan garpu Xerial dari bungkus sqlite Crawshaw. Saya mengganti file sqlitejdbc-v056.jar dengan Xerials sqlite-jdbc-3.7.2.jar tanpa masalah.

Menggunakan sintaksis yang sama dengan jawaban Bernie dan jauh lebih cepat dan dengan pustaka sqlite terbaru.

Apa yang berbeda dari SQLite JDBC Zentus?

Pengandar SQLite JDBC Zentus asli http://www.zentus.com/sqlitejdbc/ itu sendiri adalah utilitas yang sangat baik untuk menggunakan database SQLite dari bahasa Java, dan perpustakaan SQLiteJDBC kami juga bergantung pada implementasinya. Namun, versi java murni, yang benar-benar menerjemahkan kode c / c ++ SQLite ke dalam Java, secara signifikan lebih lambat dibandingkan dengan versi aslinya, yang menggunakan binari SQLite yang dikompilasi untuk setiap OS (win, mac, linux).

Untuk menggunakan versi asli dari sqlite-jdbc, pengguna harus menetapkan path ke kode asli (dll, jnilib, jadi file, yang merupakan program JNDI C) dengan menggunakan argumen baris perintah, misalnya, -Djava.library.path = (path ke dll, jnilib, dll.), atau -Dorg.sqlite.lib.path, dll. Proses ini rawan kesalahan dan menyusahkan untuk memberi tahu setiap pengguna untuk mengatur variabel-variabel ini. Perpustakaan SQLiteJDBC kami sepenuhnya menghilangkan ketidaknyamanan ini.

Perbedaan lain adalah bahwa kami menjaga libray SQLiteJDBC ini tetap up to date dengan versi terbaru dari mesin SQLite, karena kami adalah salah satu pengguna terpanas perpustakaan ini. Sebagai contoh, SQLite JDBC adalah komponen inti dari UTGB (University of Tokyo Genome Browser) Toolkit, yang merupakan utilitas kami untuk membuat browser genom hasil personalisasi.

EDIT : Seperti biasa ketika Anda memperbarui sesuatu, akan ada masalah di beberapa tempat yang tidak jelas dalam kode Anda (terjadi pada saya). Tes tes uji =)

Daniel Magnusson
sumber
1
The sqlite-jdbcproyek besar, tetapi menyadari bahwa itu adalah Apache berlisensi . Karena itu, Anda harus memberikan atribusi jika menggunakannya, apakah kode Anda FOSS atau milik.
dotancohen
16

Ada proyek baru SQLJet yang merupakan implementasi Javaite murni dari SQLite. Ini belum mendukung semua fitur SQLite, tetapi mungkin merupakan opsi yang sangat bagus untuk beberapa proyek Java yang bekerja dengan database SQLite.


sumber
4
Tampaknya menjanjikan tetapi tampaknya itu belum menawarkan kemampuan query SQL, semacam pemecah kesepakatan bagi saya.
Scott Bennett-McLeish
Masih tidak mendukung kueri SQL, melainkan, API tingkat rendah.
Basel Shishani
Masih sangat berguna untuk aplikasi di mana Anda hanya perlu membuat file SQLite, yaitu, tidak perlu SQL untuk meminta data.
The Alchemist
5

Posting Bernie sangat membantu. Tidak dapat memilih (tidak memiliki reputasi yang cukup :(). Tetapi itu sangat membantu. Hanya untuk mengulangi!

http://www.zentus.com/sqlitejdbc/

Di sini Anda dapat menemukan tabung JDBC SQLite terbaru. Cukup tambahkan toples ke dalam classpath Anda dan Anda selesai! :) Anda dapat menjalankan kode sampel Bernie untuk menguji apakah semuanya baik-baik saja.

http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html http://www.sqlite.org/lang.html

Di sini Anda dapat menemukan bantuan tentang sintaks SQL untuk SQLite. Cheers to SQLite :)

Srinivas
sumber
3

Ketika Anda mengkompilasi dan menjalankan kode, Anda harus mengatur nilai opsi classpath. Seperti berikut ini:

javac -classpath .;sqlitejdbc-v056.jar Text.java

java -classpath .;sqlitejdbc-v056.jar Text

Harap perhatikan "." dan sparate ";" (win, linux adalah ":")

tentang studi
sumber
3

kode sqlitejdbc dapat diunduh menggunakan git dari https://github.com/crawshaw/sqlitejdbc .

# git clone https://github.com/crawshaw/sqlitejdbc.git sqlitejdbc
...
# cd sqlitejdbc
# make

Catatan: Makefile membutuhkan biner curl untuk mengunduh pustaka / deps sqlite.

Morbo
sumber
2

Kode contoh mengarah ke kebocoran memori di Tomcat (setelah tidak menggunakan webapp, classloader masih tetap ada dalam memori) yang akan menyebabkan outofmemoryakhirnya. Cara untuk mengatasinya adalah dengan menggunakan sqlite-jdbc-3.7.8.jar ; itu adalah snapshot, jadi belum muncul untuk maven.

siput
sumber
0

Salah ketik: java -cp .:sqlitejdbc-v056.jar Test

seharusnya: java -cp .:sqlitejdbc-v056.jar; Test

perhatikan titik koma setelah ".jar" saya harap itu membantu orang, bisa menimbulkan banyak kerumitan

Eddie
sumber
Mau menguraikan? Pada * nix the; akan memisahkan java dari perintah Test (dan karenanya membuat kesalahan). Pada Windows: tidak akan berfungsi sebagai pemisah cp. Jadi semuanya .:xxx.jar;tidak masuk akal. Dan Anda juga perlu menentukan nama paket untuk kelas Tes.
eckes