336 Stimmen

Java und SQLite

Mich reizt die Übersichtlichkeit, die eine Datenbank mit nur einer Datei bietet. Welche Treiber/Verbindungsbibliothek gibt es, um SQLite mit Java zu verbinden und zu verwenden.

Ich habe eine Wrapper-Bibliothek entdeckt, http://www.ch-werner.de/javasqlite aber gibt es noch andere, wichtigere Projekte?

250voto

Bernie Perez Punkte 12323

Ich habe Ihre Frage bei der Suche nach Informationen über SQLite und Java. Ich dachte nur, ich füge meine Antwort hinzu, die ich auch in meinem Blog .

Ich programmiere schon seit einiger Zeit in Java. Ich habe auch über SQLite gewusst, aber es nie benutzt Nun, ich habe es durch andere Anwendungen aber nie in einer Anwendung, die ich programmiert habe. So brauchte ich es für ein Projekt in dieser Woche und es ist so einfach zu bedienen!

Ich habe einen Java JDBC-Treiber für SQLite gefunden. Fügen Sie einfach die JAR-Datei in den Klassenpfad und importieren Sie java.sql.*

Seine Testanwendung erstellt eine Datenbankdatei, sendet einige SQL-Befehle zum Erstellen einer Tabelle, speichert einige Daten in der Tabelle, liest sie zurück und zeigt sie auf der Konsole an. Sie erstellt die test.db Datei im Root-Verzeichnis des Projekts. Sie können dieses Beispiel ausführen mit 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();
    }
  }

196voto

Peter Hoffmann Punkte 52200

En wiki listet einige weitere Verpackungen auf:

31voto

javashlook Punkte 10212

Soweit ich weiß, haben Sie speziell nach SQLite gefragt, aber vielleicht HSQL-Datenbank würde besser zu Java passen. Es ist in Java selbst geschrieben, läuft in der JVM, unterstützt In-Memory-Tabellen usw. und all diese Funktionen machen es für Prototyping und Unit-Tests recht brauchbar.

19voto

Daniel Magnusson Punkte 9281

Das Projekt von David Crawshaw (sqlitejdbc-v056.jar) scheint veraltet zu sein und wurde zuletzt am 20. Juni 2009 aktualisiert, Quelle hier

Ich würde empfehlen Xerials-Gabel von Crawshaw sqlite wrapper. Ich ersetzte sqlitejdbc-v056.jar mit Xerials sqlite-jdbc-3.7.2.jar Datei ohne Probleme.

Verwendet dieselbe Syntax wie in Bernie's Antwort und ist viel schneller und mit der neuesten Sqlite-Bibliothek.

Was unterscheidet sich von Zentus' SQLite JDBC?

Der ursprüngliche Zentus SQLite JDBC-Antrieb http://www.zentus.com/sqlitejdbc/ selbst ist ein hervorragendes Verwendung von SQLite-Datenbanken in Java, und unsere Bibliothek SQLiteJDBC stützt sich ebenfalls auf ihre Implementierung. Allerdings ist ihre reine Java-Version, die den C/C++-Code von SQLite vollständig in Java übersetzt, ist deutlich langsamer als ihre native Version, die SQLite Binärdateien verwendet, die für jedes Betriebssystem (Win, Mac, Linux) kompiliert wurden.

Um die native Version von sqlite-jdbc zu verwenden, musste der Benutzer einen Pfad zu den nativen Codes (dll-, jnilib-, so-Dateien, die JNDI-C-Programme sind) mit Befehlszeilenargumente, dll, jnilib, etc.), oder -Dorg.sqlite.lib.path, etc. Dieser Prozess war fehleranfällig und lästig, wenn man jeden Benutzer auffordert, diese Variablen zu setzen. Unsere SQLiteJDBC-Bibliothek beseitigt diese Unannehmlichkeiten vollständig.

Ein weiterer Unterschied ist, dass wir die SQLite-Engine auf dem neuesten Stand halten, denn wir sind einer der einer der heißesten Nutzer dieser Bibliothek sind. Zum Beispiel ist SQLite JDBC eine Kernkomponente des UTGB (University of Tokyo Genome Browser) Toolkits, unserem Dienstprogramm zur Erstellung von personalisierten Genom-Browsern.

EDITAR : Wie üblich, wenn Sie etwas aktualisieren, gibt es Probleme an einer obskuren Stelle in Ihrem Code (ist mir passiert). Test Test Test =)

16voto

Es gibt ein neues Projekt SQLJet das eine reine Java-Implementierung von SQLite ist. Es unterstützt noch nicht alle SQLite-Funktionen, kann aber eine sehr gute Option für einige Java-Projekte sein, die mit SQLite-Datenbanken arbeiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X