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 件のコメント:
コメントを投稿