単一ファイル データベースが提供する簡潔さに惹かれます。SQLite を Java に接続して使用するためのドライバ/コネクタ ライブラリはどれですか。
ラッパー ライブラリhttp://www.ch-werner.de/javasqliteを発見しましたが、他に利用できる著名なプロジェクトはありますか?
単一ファイル データベースが提供する簡潔さに惹かれます。SQLite を Java に接続して使用するためのドライバ/コネクタ ライブラリはどれですか。
ラッパー ライブラリhttp://www.ch-werner.de/javasqliteを発見しましたが、他に利用できる著名なプロジェクトはありますか?
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();
}
}
ウィキには、さらにいくつかのラッパーがリストされています。
特に SQLite について質問されたことは承知していますが、HSQL データベースの方が Java に適しているかもしれません。Java 自体で記述され、JVM で実行され、メモリ内テーブルなどをサポートします。これらすべての機能により、プロトタイピングや単体テストに非常に便利です。
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 のコア コンポーネントです。
編集:何かを更新するときはいつものように、コードのあいまいな場所に問題が発生します(私に起こりました)。テスト テスト テスト =)
SQLite の純粋な Java 実装である新しいプロジェクトSQLJetがあります。まだすべての SQLite 機能をサポートしているわけではありませんが、SQLite データベースで動作する一部の Java プロジェクトには非常に適したオプションになる可能性があります。
sqlitejdbc コードは、git を使用してhttps://github.com/crawshaw/sqlitejdbcからダウンロードできます。
# git clone https://github.com/crawshaw/sqlitejdbc.git sqlitejdbc
...
# cd sqlitejdbc
# make
注: Makefile には、sqlite ライブラリ/deps をダウンロードするための curl バイナリが必要です。
コードをコンパイルして実行するときは、クラスパス オプションの値を設定する必要があります。次のように:
javac -classpath .;sqlitejdbc-v056.jar Text.java
java -classpath .;sqlitejdbc-v056.jar Text
「。」に注意してください。およびスペアの「;」(win、Linux は「:」)
サンプル コードは、Tomcat でメモリ リークを引き起こし (Web アプリケーションをアンデプロイした後、クラスローダーはメモリに残ります)、outofmemory
最終的には. それを解決する方法は、sqlite-jdbc-3.7.8.jarを使用することです。これはスナップショットなので、maven にはまだ表示されません。
打ち間違え:java -cp .:sqlitejdbc-v056.jar Test
する必要があります:java -cp .:sqlitejdbc-v056.jar; Test
「.jar」の後のセミコロンに注意してください。これが人々を助け、多くの面倒を引き起こす可能性があることを願っています