334

単一ファイル データベースが提供する簡潔さに惹かれます。SQLite を Java に接続して使用するためのドライバ/コネクタ ライブラリはどれですか。

ラッパー ライブラリhttp://www.ch-werner.de/javasqliteを発見しましたが、他に利用できる著名なプロジェクトはありますか?

4

9 に答える 9

248

SQLiteと Javaで情報を検索しているときに、あなたの質問を見つけました。ブログにも投稿した回答を追加すると思いました。

私はしばらくJavaでコーディングしています。SQLite についても知っていましたが、使用したことはありませんでした。他のアプリケーションで使用したことはありますが、コーディングしたアプリでは使用したことがありません。今週のプロジェクトで必要だったので、使い方はとても簡単です!

SQLite 用の Java JDBC ドライバーを見つけました。JAR ファイルをクラスパスに追加し、java.sql.* をインポートするだけです。

彼のテスト アプリは、データベース ファイルを作成し、いくつかの SQL コマンドを送信してテーブルを作成し、いくつかのデータをテーブルに保存し、それを読み込んでコンソールに表示します。プロジェクトのルート ディレクトリにtest.dbファイルが作成されます。この例は で実行できます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();
    }
  }
于 2009-02-27T00:49:07.993 に答える
196

ウィキには、さらにいくつかのラッパーがリストされています。

  • Java ラッパー (SWIG インターフェース周辺): http://tk-software.home.comcast.net/
  • SQLite 用の JDBC ドライバーを使用するための優れたチュートリアルです。(少なくとも動作します!) http://www.ci.uchicago.edu/wiki/bin/view/VDS/VDSDevelopment/UsingSQLite
  • Windows、Linux、OS X で組み込みのネイティブ SQLite ライブラリを使用し、他の OS では純粋な Java 実装にフォールバックするクロスプラットフォーム JDBC ドライバー: https://github.com/xerial/sqlite-jdbc (以前の zentus )
  • 別の Java - SWIG ラッパー。Win32 でのみ動作します。http://rodolfo_3.tripod.com/index.html
  • sqlite-java-shell: NestedVM で構築された sqlite3 コマンドライン シェルの 100% Pure Java ポート。(これは JDBC ドライバーではありません)。
  • Mysaifu JVM 用 SQLite JDBC ドライバー: Mysaifu JVM 用 SQLite JDBC ドライバーおよび Windows (x86) および Linux (i386/PowerPC) 用 SQLite JNI ライブラリ。
于 2008-09-03T06:17:50.007 に答える
31

特に SQLite について質問されたことは承知していますが、HSQL データベースの方が Java に適しているかもしれません。Java 自体で記述され、JVM で実行され、メモリ内テーブルなどをサポートします。これらすべての機能により、プロトタイピングや単体テストに非常に便利です。

于 2009-02-27T12:13:36.163 に答える
19

David Crawshaw プロジェクト (sqlitejdbc-v056.jar) は古くなっているようで、最終更新は 2009 年 6 月 20 日、 ソースはこちら

Crawshaw sqlite ラッパーのXerials フォークをお勧めします。sqlitejdbc-v056.jar を問題なく Xerials sqlite-jdbc-3.7.2.jar ファイルに置き換えました。

バーニーの回答と同じ構文を使用し、はるかに高速で、最新の sqlite ライブラリを使用します。

Zentus の SQLite JDBC との違いは何ですか?

元の Zentus の SQLite JDBC ドライバー http://www.zentus.com/sqlitejdbc/自体は、Java 言語から SQLite データベースを使用するための優れたユーティリティであり、当社の SQLiteJDBC ライブラリもその実装に依存しています。ただし、SQLite の c/c++ コードを Java に完全に変換するピュア Java バージョンは、各 OS (win、mac、linux) 用にコンパイルされた SQLite バイナリを使用するネイティブ バージョンと比較して大幅に遅くなります。

sqlite-jdbc のネイティブ バージョンを使用するには、ユーザーはコマンドライン引数を使用して、ネイティブ コード (JNDI C プログラムである dll、jnilib、so ファイル) へのパスを設定する必要がありました (例: -Djava.library.path=)。 (dll、jnilib などへのパス)、または -Dorg.sqlite.lib.path など。このプロセスはエラーが発生しやすく、すべてのユーザーにこれらの変数を設定するように指示するのが面倒でした。当社の SQLiteJDBC ライブラリは、これらの不都合を完全に解消します。

もう 1 つの違いは、このライブラリの最もホットなユーザーの 1 人であるため、この SQLiteJDBC ライブラリを SQLite エンジンの最新バージョンに合わせて最新の状態に維持していることです。たとえば、SQLite JDBC は、パーソナライズされたゲノム ブラウザーを作成するためのユーティリティである UTGB (University of Tokyo Genome Browser) Toolkit のコア コンポーネントです。

編集:何かを更新するときはいつものように、コードのあいまいな場所に問題が発生します(私に起こりました)。テスト テスト テスト =)

于 2012-09-05T09:24:30.890 に答える
16

SQLite の純粋な Java 実装である新しいプロジェクトSQLJetがあります。まだすべての SQLite 機能をサポートしているわけではありませんが、SQLite データベースで動作する一部の Java プロジェクトには非常に適したオプションになる可能性があります。

于 2009-08-10T23:48:12.457 に答える
3

sqlitejdbc コードは、git を使用してhttps://github.com/crawshaw/sqlitejdbcからダウンロードできます。

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

注: Makefile には、sqlite ライブラリ/deps をダウンロードするための curl バイナリが必要です。

于 2012-11-07T16:10:32.810 に答える
3

コードをコンパイルして実行するときは、クラスパス オプションの値を設定する必要があります。次のように:

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

java -classpath .;sqlitejdbc-v056.jar Text

「。」に注意してください。およびスペアの「;」(win、Linux は「:」)

于 2012-02-24T07:10:27.650 に答える
2

サンプル コードは、Tomcat でメモリ リークを引き起こし (Web アプリケーションをアンデプロイした後、クラスローダーはメモリに残ります)、outofmemory最終的には. それを解決する方法は、sqlite-jdbc-3.7.8.jarを使用することです。これはスナップショットなので、maven にはまだ表示されません。

于 2012-01-10T00:59:50.690 に答える
0

打ち間違え:java -cp .:sqlitejdbc-v056.jar Test

する必要があります:java -cp .:sqlitejdbc-v056.jar; Test

「.jar」の後のセミコロンに注意してください。これが人々を助け、多くの面倒を引き起こす可能性があることを願っています

于 2012-01-28T15:35:40.187 に答える