イントロダクション
JavaDB、Derbyの起動について記載します。DerbyはJDK=Javaをインストールしたら一緒についてきます。JDKつまり下のキャプチャになります。
Java(JDK)のインストール先から「db」と言うフォルダがあればインストール済みと言うことです。
Java DB
Java DBはその名の通り、Java製のデータベースです。MySQL(MongoDB), PostgreSQL, GraphDBなどたくさんのDBサーバー・アプリがありますが。
このJavaDBは、埋め込み式とMySQLのようなサーバー式(筆者が勝手によんでいる呼称)の二つで起動することができます。
つまり、埋め込んでもよいし、サーバーとして起動してもよい。ということです。
埋め込み式とは
俗に言うエンベデット(embedded)という形で実行するということなのですが、実装してみた感触では、サーバーの時と変わらないです。
実行する環境として、サーバー(別プロセスで実行する)のか、同じプロセスで実行するのか?ぐらいの違いです。
主に、ARMなどの小さい基盤(マザーボード)を使用して動くPC、例えばスマホ、のアプリケーションで使用することが多いです。
サーバータイプのDBでは、スマホなどの外、つまりは、インターネット経由での通信を行ってデータのやり取りをします。
まとめると、エンベデットは軽いのです。
サーバー式とは※一般的でない言い方です。
サーバー式と呼んでおりますが、一般的ではない呼び方です。つまりはDBサーバーのことを指して読んでおります。
「埋め込み」に対して「サーバー」ということでこのように呼んだ次第です。筆者が勝手につけた呼び名ですのでご注意ください。
MySQLやPostgreなどのデータベース、もちろんOracleもサーバーとして動かすものの情報が、主流になっているようです。
「情報」といったのは、ネットの記事などでは、埋め込みのものより、サーバーの方が目に付くので「情報が主流」というような記述をしました。
つまり、ウェブブラウザでアクセスしてSQLを発行、データのCRUDを行う。もしくは、プログラムからリクエスト(SQLを含む)を受け取ってそれに対してCRUDを行うのがサーバー式。
埋め込み式は、後者のみ。という単純な分け方です。深く考えない方が良いと思います。
つまり
- サーバー式は、ブラウザとプログラムの両方で扱うことができる。
- 埋め込み式は、プログラムで扱うことができる。
ということです。
大切なのは、使用する環境はどちらのタイプが適当か?というのと判断することです。
起動するためにどうやるのか?
起動するのには大まかに2つのタイプがあります
- サーバータイプ:「ij」コマンドでDerbyを起動して、それにアクセス
- Embedタイプ:システムプロパティに起動する場所を設定して起動する
今回は2の「Embed」タイプの起動を行います。
- Derbyを起動する場所を指定する
- エンコード指定をする
<実際のコード>
String url = "jdbc:derby:/Users/takk/eclipse-workspace/AutoBlogPoster/db;create=true"; try { // システムのホーム=>Derbyを起動する場所 System.setProperty("derby.system.home", "/Users/takk/eclipse-workspace/AutoBlogPoster/"); // エンコードの指定 System.setProperty("derby.ui.codeset", "UTF8"); // 指定した場所で起動するDBのコネクションを取得する con = DriverManager.getConnection(url); // オートコミットする設定 con.setAutoCommit(true); // SQLを実行するためのオブジェクト stm = con.createStatement(); // SQL文 String isTable = "select * from BUNSETSU_MST"; // SQLの実行と実行結果取得 ResultSet rs = stm.executeQuery(isTable); while(rs.next()) { String st = rs.getString(1); System.out.println(st); } } catch(SQLException e) { e.printStackTrace(); } finally { try { // SQLを実行するオブジェクトを閉じる stm.close(); // コネクションを閉じる con.close(); // オブジェクトの解放(メモリ解放) stm = null; // 同上 con = null; } catch(SQLException e) { e.printStackTrace(); } }
[rakuten ids="kashou-hanamizuki:10000020"]
[rakuten ids="a-price:10460378"]