埋め込み可能な「非 JDBC」SQL データベースはありますか? これは、ハードウェア上でサーバーを実行する必要がないものです (SQLite など)。
純粋なJavaの場合はボーナスポイント。
いくつかあります: H2、Derby (Java SDK に「Java DB」として含まれています)、およびHSQL
H2 は非常に安定しており (ただし、本番コードには 1.3.x を使用しません)、他のほとんどすべての SQL データベースをエミュレートできます (つまり、Oracle SQL 構文を受け入れるように構成できます)。単体テストに最適です。
Derby は DB2 の Java バージョンです。使用するのは少し不器用ですが、本番用の準備ができています。
HSQLDB は、古い埋め込み型の純粋な Java データベースです。H2に出会うまではよく使っていました。
EDIT H2 はIF NOT EXISTS
、その他多くの便利な機能をサポートしています。そのようなことは JDBC の一部ではないことに注意してください。JDBC は文字列をデータベースに送信するだけです。ただし、すべてのデータベースには独自の SQL ダイアレクトと独自の機能セットがあります。これについて JDBC ができることはほとんどありません。
多くのデータベースが同様に動作するものを探す場合は、jOOQを調べてください。品質を重視する場合は、これも考慮する必要があります。
SQLite
私が最近使い始めたのはかなり良いデータベースです。メモリ内またはディスク上にデータベースを作成でき、外部インストールは必要ありません。
アップデート
@Chase、JDBCクエリについて誤解しているようです。唯一の違いは、クエリを文字列に入れることです。
これは、SQLite を使用した簡単なクエリです。
private String mSQL = "select count(1) from t\n";
private void foo()
{
Connection con = getJDBCConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while (rs.next())
{
int n = rs.getInt("anzahl");
System.out.println(n);
}
stmt.close();
con.close();
}
更新 2
これは、見たかったように、if 句を使用してテーブルをドロップするサンプルです。実際の create table ステートメントは別の場所で準備されているため、その動作を示すために行を投稿しただけです。
statement.executeUpdate("drop table if exists "+oTablename);
Sqlite4Javaは、SQLite 用の無料の Java ラッパーです。JDBC ドライバーではありません。
Mac OS X、Windows、Linux、および Android 用のバイナリがあります。