Apache Derby は、IBM から寄贈された Cloudscape のソースコードを元に、Apache ソフトウェア財団によってプログラムの開発が進められている、Java 技術で実装された RDBMS のソフトウェアです。Java DB は、オープンソースの Apache Derby データベースをオラクルがサポートしたディストリビューションです。JDBC API および Java EE API により標準の ANSI/ISO SQLをサポートします。Java DBは、JDKに含まれています。
以前、Python で SQLite3 のデータベースを操作するサンプルを紹介しましたが [1]、Java と Python を状況に応じて使い分けており、アプリケーション専用で使用するような簡単なデータベースが利用できると、どちらの場合も便利です。Java の開発環境である JDK では、Java DB が利用できるので、わざわざ SQLite を使わなくとも、ひとまず、Java DB を使ってみることにしました。
動作環境は次の通りです。Linux (Fedora) ですが、標準パッケージの OpenJDK は使用していません。
- OS: Fedora 25 (x86_64)
- Java: jdk1.8.0_112-1.8.0_112-fcs.x86_64 (Oracle)
- IDE: NetBeans IDE 8.2
ライブラリの追加
Java DB を使うためには、Java DB 用の JDBC ドライバーの入っているライブラリーが必要になります。組込用途には derby.jar を、クライアント/サーバー環境用には derbyclient.jar をクラスパスに追加します。
今回は、組込用途として derby.jar を下記のように NetBeans のプロジェクトに追加しました。
サンプルソース
今回も DBOnline の SQLite入門 › データの追加と削除 › データの更新 [2] で使われている例をベースに焼き直しています。あらかじめご了承ください。
package javadbtest;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
public final class JavaDBTest {
Connection conn;
JavaDBTest(String dbFile) {
connection(dbFile);
}
// database connection
void connection(String dbFile) {
try {
conn = DriverManager.getConnection("jdbc:derby:" + dbFile + "; create=true");
} catch (SQLException ex) {
Logger.getLogger(JavaDBTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
// Executes the given SQL statement that returns nothing
void executeSQL(String sql) {
Statement stat;
try {
stat = conn.createStatement();
stat.executeUpdate(sql);
} catch (SQLException ex) {
Logger.getLogger(JavaDBTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
// Executes the given SQL statement, which returns a single ResultSet object.
ResultSet querySQL(String sql) {
Statement stat;
try {
stat = conn.createStatement();
return stat.executeQuery(sql);
} catch (SQLException ex) {
Logger.getLogger(JavaDBTest.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
// database termination
void shutdown(String dbFile) {
try {
conn.close();
DriverManager.getConnection("jdbc:derby:" + dbFile + "; shutdown=true");
} catch (SQLException ex) {
Logger.getLogger(JavaDBTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String[] args) {
String dbName = "test01";
String dbDir = new File(System.getenv("HOME"), "tmp").getPath();
String dbFile = new File(dbDir, dbName).getPath();
JavaDBTest db = new JavaDBTest(dbFile);
// create table
db.executeSQL("create table staff(id integer, name varchar(10), unit varchar(10), flag varchar(4))");
db.executeSQL("insert into staff(id, name, unit, flag) values (1, 'Satoh', 'Sales', 'Yes')");
db.executeSQL("insert into staff(id, name, unit, flag) values (2, 'Mori', 'Office', 'No')");
db.executeSQL("insert into staff(id, name, unit, flag) values (3, 'Yamada', 'Office', 'Yes')");
db.executeSQL("insert into staff(id, name, unit, flag) values (4, 'Asada', 'Tech', 'Yes')");
db.executeSQL("insert into staff(id, name, unit, flag) values (5, 'Noguchi', 'Sales', 'No')");
// query
ResultSet res = db.querySQL("select * from staff");
try {
while (res.next()) {
System.out.println(res.getInt("id") + "\t" + res.getString("name")
+ "\t" + res.getString("unit") + "\t" + res.getString("flag"));
}
} catch (SQLException ex) {
Logger.getLogger(JavaDBTest.class.getName()).log(Level.SEVERE, null, ex);
}
// database termination
db.shutdown(dbFile);
}
}
実行例
CPU (N2830) が非力だからでしょうか、妙に時間がかかっています。
run: 1 Satoh Sales Yes 2 Mori Office No 3 Yamada Office Yes 4 Asada Tech Yes 5 Noguchi Sales No ビルド成功(合計時間: 12秒)
参考サイト
- bitWalk's: Python と SQLite3
- データの更新(UPDATE文) - SQLite入門
- JavaDBメモ(Hishidama's JavaDB Memo)
- Windows上でjavaDBをとりあえず使ってみる
にほんブログ村



0 件のコメント:
コメントを投稿