Java ve SQLite [kapalı]


333

Ben tek bir dosya veritabanı sağladığı düzgünlüğü çekici. SQLite'ı Java ile bağlamak ve kullanmak için hangi sürücü / konektör kütüphanesi var.

Bir sarıcı kütüphane keşfettim, http://www.ch-werner.de/javasqlite , ancak daha başka önemli projeler var mı?


10
Yüzlerce upvotes ve yüzlerce upvotes içeren cevaplar içeren bir sorunun "konu dışı" olarak kapatılmasını seviyorum. Bu bir tür utanç verici, lol
Andrew Koster

Yanıtlar:


196

Wiki listeleri biraz daha sarmalayıcılar:


7
Bu listeye eklediğim sqlite4java - code.google.com/p/sqlite4java - bu bir sarıcı (JDBC yok); Windows, Mac, Linux için önceden derlenmiştir. Kullanımı basittir ve geliştiricinin SQLite'yi kötüye kullanmaktan kaçınmasına yardımcı olmak için bazı sözleşmeler uygular.
sereda

7
sqlite4java ilginç görünüyor, ama aynı zamanda orada çeşitli sarmalayıcılar büyük bir karşılaştırma var: code.google.com/p/sqlite4java/wiki/ComparisonToOtherWrappers
Scott Bennett-McLeish 17:10

1
@kdt zentus sürücüsü ile bulduğum sorun BLOB'ları hiç desteklemiyor gibi görünüyor
Martijn

12
@Martijn xerial.org/trac/Xerial/wiki/SQLiteJDBC , zentus sürücüsünün bir çataldır ve BLOB'u destekler (sitelerinde kısa bir tutku vardır).
johnharris85


247

Sorunuzu SQLite ve Java ile bilgi ararken buldum . Sadece bloguma da gönderdiğim yanıtı ekleyeceğimi düşündüm .

Bir süredir Java'da kod yazıyorum. Ben de SQLite hakkında biliyorum ama hiç kullanmadım ... Eh ben diğer uygulamalar aracılığıyla kullandım ama asla kodladığım bir uygulamada. Bu hafta bir proje için ihtiyacım vardı ve bu çok basit bir kullanım!

SQLite için bir Java JDBC sürücüsü buldum. Sadece JAR dosyasını sınıf yolunuza ekleyin ve java.sql dosyasını içe aktarın. *

Test uygulaması bir veritabanı dosyası oluşturacak, bir tablo oluşturmak için bazı SQL komutları gönderecek, bazı verileri tabloya kaydedecek ve geri okuyacak ve konsolda görüntüleyecektir. Bu yaratacak test.db projenin kök dizinine. Bu örneği ile çalıştırabilirsiniz 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();
    }
  }

1
Bu nedenle , stackoverflow.com'un tasarımının internette asılı kalan tüm "eski" yayınlar nedeniyle daha iyi olduğunu söylerken Joel'in boğa (Google teknoloji konuşması: youtube.com/watch?v=NWHfY_lvKIQ ) konuştuğunu düşünüyorum . Bu sadece bir rehash.
Nikolaos

26
Ayrıca Crawshaw projesinin hiatus üzerinde göründüğünü, ancak burada çatallandığını ve güncellendiğini göreceksiniz
lapo

8
zentus.com kırık görünüyor, burada ayna bulundu; priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/about.htm
Daniel Magnusson

3
Teşekkürler @DanielMagnusson, hayat kurtarıcısın. Konu üzerindeyken, sqliteJDBC sürücüsünü arayan herkes priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/… adresine gidebilir çünkü about.htm bağlantısı yanlıştır.
javatarz


30

Özellikle SQLite hakkında sorduğunuzu anlıyorum, ancak HSQL veritabanı Java'ya daha uygun olabilir. Java'nın kendisinde yazılır, JVM'de çalışır, bellek içi tabloları vb. Destekler ve tüm bu özellikler onu prototipleme ve birim testi için oldukça kullanılabilir hale getirir.


3
Evet HSQL çok iyi bir seçim ve iyi bir etki için birkaç istemci uygulamasında oldukça yoğun bir şekilde kullandım. Ancak bu örnekte SQLite kullanmak istemiştim.
Scott Bennett-McLeish

18

David Crawshaw projesi (sqlitejdbc-v056.jar) eski görünüyor ve son güncelleme 20 Haz 2009, kaynak burada

Crawshaw sqlite sarıcı Xerials çatal tavsiye ederim . Sqlitejdbc-v056.jar yerine Xerials sqlite-jdbc-3.7.2.jar dosyasını sorunsuz bir şekilde değiştirdim.

Bernie'nin cevabı ile aynı sözdizimini kullanır ve çok daha hızlı ve en yeni sqlite kütüphanesi ile.

Zentus'un SQLite JDBC'sinden farklı olan nedir?

Orijinal Zentus'un SQLite JDBC sürücüsü http://www.zentus.com/sqlitejdbc/ , Java dilinden SQLite veritabanlarını kullanmak için mükemmel bir yardımcı programdır ve SQLiteJDBC kütüphanemiz de uygulamasına dayanmaktadır. Bununla birlikte, SQLite'nin c / c ++ kodlarını tamamen Java'ya çeviren saf java sürümü, her işletim sistemi (win, mac, linux) için derlenen SQLite ikili dosyalarını kullanan yerel sürümüne göre önemli ölçüde yavaştır.

Sqlite-jdbc'nin yerel sürümünü kullanmak için, kullanıcı komut satırı bağımsız değişkenlerini (ör., -Djava.library.path =) kullanarak yerel kodlara (dll, jnilib, yani JNDI C programları olan dosyalar) bir yol ayarlamalıdır. (dll, jnilib vb. yol) veya -Dorg.sqlite.lib.path, vb. SQLiteJDBC kütüphanemiz bu rahatsızlıkları tamamen ortadan kaldırır.

Başka bir fark, bu SQLiteJDBC kütüphanesini SQLite motorunun en yeni sürümüne güncel tutmamızdır, çünkü bu kütüphanenin en sıcak kullanıcılarından biriyiz. Örneğin, SQLite JDBC, kişiselleştirilmiş genom tarayıcıları oluşturma aracımız olan UTGB (Tokyo Üniversitesi Genom Tarayıcısı) Araç Seti'nin temel bir bileşenidir.

DÜZENLEME : Her zamanki gibi bir şeyi güncellediğinizde, kodunuzda bazı belirsiz yerlerde sorunlar olacaktır (bana oldu). Test test testi =)


1
sqlite-jdbcProje harika ama o olduğunu unutmayın Apaçi lisanslı . Bu nedenle, kodunuz FOSS veya tescilli olsun, kullanıyorsanız, atıfta bulunmalısınız.
dotancohen

16

SQLite'nin saf bir Java uygulaması olan yeni bir proje SQLJet var. Henüz tüm SQLite özelliklerini desteklemiyor, ancak SQLite veritabanlarıyla çalışan bazı Java projeleri için çok iyi bir seçenek olabilir.


4
Umut verici görünüyor ama henüz bir SQL sorgu yeteneği sunmuyor gibi görünüyor, benim için bir tür anlaşma kırıcı.
Scott Bennett-McLeish

Yine de SQL sorgularını desteklemez, daha düşük düzeyli bir API'dir.
Basel Shishani

Yine de yalnızca SQLite dosyaları oluşturmanız gereken uygulamalar için çok yararlıdır , yani, verileri sorgulamak için SQL'e ihtiyaç duymaz.
Simyacı

5

Bernie'nin gönderisi çok faydalı. Oy veremedi (yeterli itibara sahip değilim :(). Ama çok yardımcı oldu. Sadece tekrarlamak için!

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

Burada en son SQLite JDBC kavanozunu bulabilirsiniz. Sadece kavanozu sınıf yoluna ekle ve bitti! :) Her şeyin yolunda olup olmadığını test etmek için Bernie'nin örnek kodunu çalıştırabilirsiniz.

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

Burada SQLite için SQL sözdizimi hakkında biraz yardım bulabilirsiniz. SQLite Şerefe :)


3

Kodu derleyip çalıştırdığınızda, sınıf yolu seçenekleri değerini ayarlamanız gerekir. Tıpkı aşağıdaki gibi:

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

java -classpath .;sqlitejdbc-v056.jar Text

Lütfen "." ve sparate ";" (kazan, linux ":")


3

sqlitejdbc kodu git kullanılarak https://github.com/crawshaw/sqlitejdbc adresinden indirilebilir .

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

Not: Makefile, sqlite kütüphanelerini / depslerini indirmek için curl ikili dosya gerektirir.


2

Örnek kod, Tomcat'te (web uygulamasını çözdükten sonra, sınıf yükleyici hala bellekte kalır) outofmemorysonuçta neden olacak bir bellek sızıntısına yol açar . Çözmenin yolu sqlite-jdbc-3.7.8.jar kullanmaktır ; bu bir enstantane, bu yüzden henüz maven için görünmüyor.


0

Tipo: java -cp .:sqlitejdbc-v056.jar Test

olmalı: java -cp .:sqlitejdbc-v056.jar; Test

".jar" sonra noktalı virgül dikkat insanlar yardımcı olur, güçlük bir sürü neden olabilir umuyoruz


Ayrıntılı düşünmek ister misiniz? Üzerinde * nix; java'yı Test komutundan ayırır (ve bu nedenle bir hata oluşturur). Windows'ta: cp ayırıcısı olarak çalışmaz. Yani sonuçta .:xxx.jar;mantıklı değil. Ayrıca, Test sınıfı için paket adını belirtmeniz gerekir.
Eckes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.