JavaとSQLite [終了]


333

単一のファイルデータベースが提供するきちんとしたところに惹かれます。SQLiteをJavaに接続して使用するためのドライバー/コネクターライブラリはどこにありますか。

ラッパーライブラリhttp://www.ch-werner.de/javasqliteを見つけましたが、他にもっと有名なプロジェクトはありますか?


9
何百もの賛成票がある質問と、何百もの賛成票がある回答が「オフトピック」として閉じられているのが気に入っています。それはちょっと恥ずかしいです、笑
アンドリューコスター

回答:


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%ピュアJavaポート。(これはJDBCドライバーではありません)。
  • Mysaifu JVM用のSQLite JDBCドライバー:Mysaifu JVM用のSQLite JDBCドライバー、Windows(x86)およびLinux(i386 / PowerPC)用のSQLite JNIライブラリ。

7
このリストに追加したのは、sqlite4java-code.google.com/p/ sqlite4java-ラッパー(JDBCなし)です。Windows、Mac、Linux用にプリコンパイルされています。使い方は簡単で、開発者がSQLiteの誤用を避けるのに役立ついくつかの規約が適用されます。
sereda

7
sqlite4javaは面白そうだね、彼らはまた、そこに様々なラッパーの偉大な比較がありますcode.google.com/p/sqlite4java/wiki/ComparisonToOtherWrappers
スコット・ベネット・マクレイシュ監督

1
@kdt zentusドライバーで見つけた問題は、BLOBをまったくサポートしていないようです
Martijn

12
@Martijn xerial.org/trac/Xerial/wiki/SQLiteJDBCは、zentusのドライバーのフォークであり、BLOBをサポートします(サイトに短い説明があります)。
johnharris85


247

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();
    }
  }

1
これが、インターネット上で「古い」投稿がぶら下がっているので、stackoverflow.comのデザインの方が優れていると言ったときに、Joelが強気で話していたと思う(Googleテクノロジートーク:youtube.com/watch?v=NWHfY_lvKIQ)と思います。それは単なるリハッシュです。
ニコラオス2011年

26
また、Crawshawプロジェクトは休止状態にあるようですが、フォークされ、ここで更新されました:xerial.org/trac/Xerial/wiki/SQLiteJDBC
lapo

8
zentus.comが壊れているようです。ここにミラーが見つかりました。priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/about.htm
Daniel Magnusson

3
ありがとう@DanielMagnusson、あなたは命の恩人です。話題にしながら、それでもsqliteJDBCドライバーを探している人は行くことができpriede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/...をへのリンクabout.htmリンクが間違っているからです。
javatarz


30

SQLiteについて具体的に質問されたとのことですが、HSQLデータベースの方がJavaに適していると思います。これはJava自体で記述され、JVMで実行され、インメモリテーブルなどをサポートし、そのすべての機能により、プロトタイピングや単体テストに非常に使いやすくなっています。


3
はい、HSQLは非常に良い選択であり、いくつかのクライアントアプリでかなり効果的に使用してきました。ただし、この場合は、実際にSQLiteを使用したいと思いました。
Scott Bennett-McLeish

18

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に変換するpure-javaバージョンは、各OS(win、mac、linux)用にコンパイルされたSQLiteバイナリを使用するネイティブバージョンと比較して大幅に遅くなります。

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

もう1つの違いは、このSQLiteJDBC librayを最新バージョンのSQLiteエンジンに最新の状態に保つことです。これは、このライブラリの最もホットなユーザーの1人だからです。たとえば、SQLite JDBCは、パーソナライズされたゲノムブラウザーを作成するためのユーティリティであるUTGB(東京大学ゲノムブラウザー)ツールキットのコアコンポーネントです。

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


1
sqlite-jdbcプロジェクトは素晴らしいですが、それがあることに注意してApacheがライセンスさ。したがって、コードがFOSSであるかプロプライエタリであるかに関係なく、それを使用する場合は帰属を示す必要があります。
dotancohen 2015年

16

SQLiteの純粋なJava実装である新しいプロジェクトSQLJetがあります。まだすべてのSQLite機能をサポートしていませんが、SQLiteデータベースで動作するいくつかのJavaプロジェクトにとっては非常に良いオプションかもしれません。


4
有望に見えますが、SQLクエリ機能はまだ提供されていないようで、私にとっては取引ブレーカーのようなものです。
スコットベネット-マクレッシュ

それでも、SQLクエリはサポートされず、下位レベルのAPIがサポートされます。
バーゼルシシャニ2013年

SQLiteファイルの生成のみが必要なアプリケーション、つまり、データのクエリにSQLを必要としないアプリケーションには、依然として非常に役立ちます。
錬金術師

5

バーニーの投稿はとても役に立ちます。投票できませんでした(評判が十分ではありません:()。しかし、それは非常に役立ちました。繰り返します!

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

ここでは、最新のSQLite JDBC jarを見つけることができます。jarをクラスパスに追加するだけで完了です。:)バーニーのサンプルコードを実行して、すべてが正常かどうかをテストできます。

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

ここでは、SQLiteのSQL構文に関するヘルプを参照できます。SQLiteへの乾杯:)


3

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

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

java -classpath .;sqlitejdbc-v056.jar Text

「に注意してください。」そして、スパレート ";"(win、linuxは ":")


3

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

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

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


2

コード例により、Tomcatでメモリリークが発生し(webappをアンデプロイした後もクラスローダーがメモリに残ったまま)、outofmemory最終的にはメモリリークが発生します。それを解決する方法は、sqlite-jdbc-3.7.8.jarを使用することです。これはスナップショットなので、Mavenにはまだ表示されません。


0

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

でなければなりません: java -cp .:sqlitejdbc-v056.jar; Test

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


詳しく説明しますか?* nixでは; テストコマンドからJavaを分離します(したがって、エラーが発生します)。Windowsでは、:はcpセパレーターとして機能しません。つまり、全体として.:xxx.jar;意味がありません。また、Testクラスのパッケージ名も指定する必要があります。
eckes
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.