C:\Program Files\Java\jdk1.6.0\db\frameworks\embedded\bin\setEmbeddedCP.bat
C:\Program Files\Java\jdk1.6.0\db\frameworks\NetworkServer\bin\setNetworkServerCP.bat
C:\Program Files\Java\jdk1.6.0\db\frameworks\NetworkServer\setNetworkClientCP.bat
bat や sh で wrap されている中身は derbyrun.jar
create=true オプションをつけておくと指定したディレクトリに、新しい firstdb ができる。
C:\Program Files\Java\jdk1.6.0\db\frameworks\embedded\bin>setEmbeddedCP.bat C:\Program Files\Java\jdk1.6.0\db\frameworks\embedded\bin>ij ij バージョン 10.2 ij> connect 'jdbc:derby:C:\javadb\firstdb;create=true'; ij>
ij> CREATE TABLE FIRSTTABLE (ID INT PRIMARY KEY, NAME VARCHAR(12)); 0 行が挿入/更新/削除されました ij> INSERT INTO FIRSTTABLE VALUES (10,'TEN'),(20,'TWENTY'),(30,'THIRTY'); 3 行が挿入/更新/削除されました ij> SELECT * FROM FIRSTTABLE; ID |NAME ------------------------ 10 |TEN 20 |TWENTY 30 |THIRTY 3 行が選択されました ij> SELECT * FROM FIRSTTABLE WHERE ID=20; ID |NAME ------------------------ 20 |TWENTY 1 行が選択されました ij>
ij> exit; C:\Program Files\Java\jdk1.6.0\db\frameworks\embedded\bin>
ij> run 'order.ddl'; ij> ALTER TABLE ORDER_TBL DROP CONSTRAINT ORDER_CUSTOMER_FOREIGN_KEY; 0 行が挿入/更新/削除されました ij> ALTER TABLE ORDER_TBL DROP CONSTRAINT ORDER_ITEM_FOREIGN_KEY; 0 行が挿入/更新/削除されました ij> DROP TABLE ORDER_TBL; 0 行が挿入/更新/削除されました ij> ALTER TABLE CUSTOMER DROP CONSTRAINT CUSTOMER_PRIMARY_KEY; 0 行が挿入/更新/削除されました ij> ALTER TABLE ITEM DROP CONSTRAINT ITEM_PRIMARY_KEY; 0 行が挿入/更新/削除されました ij> DROP TABLE ITEM; 0 行が挿入/更新/削除されました ij> DROP TABLE CUSTOMER; 0 行が挿入/更新/削除されました ij> CREATE TABLE CUSTOMER ( ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY, NAME VARCHAR(32) NOT NULL, CREDIT_LIMIT INTEGER NOT NULL ); 0 行が挿入/更新/削除されました ij> ALTER TABLE CUSTOMER ADD CONSTRAINT CUSTOMER_PRIMARY_KEY PRIMARY KEY (ID); 0 行が挿入/更新/削除されました ij> CREATE TABLE ITEM ( ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY, (以下略)
× // Primary Key の設定 ALTER TABLE CUSTOMER ADD CONSTRAINT CUSTOMER_PRIMARY_KEY PRIMARY KEY (ID);
○ ALTER TABLE CUSTOMER // Primary Key の設定 ADD CONSTRAINT CUSTOMER_PRIMARY_KEY PRIMARY KEY (ID);
○ | NO ACTION | 親タプルが変更/削除されても何もしない |
○ | RESTRICT | 子タプルを変更/削除しないと親タプルを変更/削除できない |
× | CASCADE | 親タプルが変更/削除されると、連動して子タプルが削除される |
× | SET NULL | 親タプルが変更/削除されると、連動してFKに null が書き込まれる |
http://db.apache.org/derby/docs/dev/ja_JP/ref/rrefsqlj13590.html には、使えると書いてあるが・・・
Java DB の状態を表示する
既存のデータベースからDDL文を作成する
C:\Program Files\Java\jdk1.6.0\db\frameworks\NetworkServer\bin>setNetworkServerCP.bat C:\Program Files\Java\jdk1.6.0\db\frameworks\NetworkServer\bin>startNetworkServer.bat サーバーは、ポート 1527 で接続を受け入れる準備ができました。
サーバを立ち上げた DOSプロンプト とは別の DOSプロンプトを立ち上げて実行。
接続URLが少し違うだけで、Embedded のときと同じ。
C:\Program Files\Java\jdk1.6.0\db\frameworks\NetworkServer\bin>setNetworkClientCP.bat C:\Program Files\Java\jdk1.6.0\db\frameworks\NetworkServer\bin>ij ij バージョン 10.2 ij> connect 'jdbc:derby://localhost:1527/C:\javadb\firstdb'; ij> SELECT * FROM FIRSTTABLE; ID |NAME ------------------------ 10 |TEN 20 |TWENTY 30 |THIRTY 3 行が選択されました ij> exit; C:\Program Files\Java\jdk1.6.0\db\frameworks\NetworkServer\bin>
サーバを立ち上げた DOSプロンプト とは別の DOSプロンプトを立ち上げて実行。
C:\Program Files\Java\jdk1.6.0\db\frameworks\NetworkServer\bin>setNetworkServerCP.bat C:\Program Files\Java\jdk1.6.0\db\frameworks\NetworkServer\bin>NetworkServerControl.bat shutdown -h localhost -p 1527 シャットダウンが正常に行われました。
※stopNetworkServer?.bat は、上手く動かなかった
いつぞや使った呪文一覧を作る (DDLファイルはこちら→ magics.ddl)
C:\Program Files\Java\jdk1.6.0\db\frameworks\embedded\bin>setEmbeddedCP.bat C:\Program Files\Java\jdk1.6.0\db\frameworks\embedded\bin>ij ij バージョン 10.2 ij> connect 'jdbc:derby:C:\javadb\firstdb'; ij> run 'C:\temp\magics.ddl'; ij> ALTER TABLE MAGIC DROP CONSTRAINT MAGIC_PRIMARY_KEY; 0 行が挿入/更新/削除されました ij> DROP TABLE MAGIC; 0 行が挿入/更新/削除されました ij> CREATE TABLE MAGIC ( ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY, NAME VARCHAR(32) NOT NULL, MP INTEGER NOT NULL, EXPLANATION VARCHAR(255) ); 0 行が挿入/更新/削除されました ij> ALTER TABLE MAGIC ADD CONSTRAINT MAGIC_PRIMARY_KEY PRIMARY KEY (ID); 0 行が挿入/更新/削除されました ij> INSERT INTO MAGIC (NAME,MP,EXPLANATION) VALUES ('メラ',2,'敵1体に約10のダメージ'); 1 行が挿入/更新/削除されました ij> INSERT INTO MAGIC (NAME,MP,EXPLANATION) VALUES ('メラミ',4,'敵1体に約80のダメージ'); 1 行が挿入/更新/削除されました ij> INSERT INTO MAGIC (NAME,MP,EXPLANATION) VALUES ('メラゾーマ',10,'敵1体に約180のダメージ'); 1 行が挿入/更新/削除されました (以下略)
package com.snail.exam.derby;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.RowProcessor;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
public class DerbyExam {
public static void main(String[] args) throws SQLException {
String connectionURL = "jdbc:derby:C:\\javadb\\firstdb";
try {
Connection con = DriverManager.getConnection(connectionURL);
QueryRunner qr = new QueryRunner();
ResultSetHandler rsh = new MapListHandler();
List result = (List) qr.query(con,"SELECT * FROM MAGIC", rsh);
for(Object m:result){
System.out.println(m);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
{id=1, mp=2, explanation=敵1体に約10のダメージ, name=メラ}
{id=2, mp=4, explanation=敵1体に約80のダメージ, name=メラミ}
{id=3, mp=10, explanation=敵1体に約180のダメージ, name=メラゾーマ}
{id=4, mp=4, explanation=敵1グループに約20のダメージ, name=ギラ}
{id=5, mp=6, explanation=敵1グループに約40のダメージ, name=ベギラマ}
{id=6, mp=10, explanation=敵1グループに約100のダメージ, name=ベギラゴン}
{id=7, mp=3, explanation=敵1体に約20のダメージ, name=ヒャド}
{id=8, mp=5, explanation=敵1グループに約60のダメージ, name=ヒャダルコ}
{id=9, mp=12, explanation=敵全体に約120のダメージ, name=マヒャド}
{id=10, mp=2, explanation=敵1グループに約15〜25のダメージ, name=バギ}
{id=11, mp=4, explanation=敵1グループに約40〜60のダメージ, name=バギマ}
{id=12, mp=8, explanation=敵1グループに約120〜140のダメージ, name=バギクロス}
{id=13, mp=4, explanation=敵1体の息の根を止める(即死), name=ザキ}
{id=14, mp=7, explanation=敵1グループの息の根を止める(即死), name=ザラキ}
{id=15, mp=15, explanation=敵全体の息の根を止める(即死), name=ザラキーマ}
{id=16, mp=5, explanation=敵全体に約20のダメージ, name=イオ}
{id=17, mp=8, explanation=敵全体に約60のダメージ, name=イオラ}
{id=18, mp=15, explanation=敵全体に約140のダメージ, name=イオナズン}
{id=19, mp=6, explanation=敵全体に約80のダメージ, name=ライデイン}
{id=20, mp=15, explanation=敵全体に約200のダメージ, name=ギガデイン}
{id=21, mp=10, explanation=敵1体に約650のダメージ, name=ミナデイン}
{id=22, mp=1, explanation=自分の命と引き換えに敵全体にダメージ, name=メガンテ}
{id=23, mp=8, explanation=敵全体にダメージ, name=コーラルレイン}
{id=24, mp=12, explanation=敵1グループにダメージ, name=メイルストロム}
{id=25, mp=2, explanation=味方ひとりのHPを約30回復, name=ホイミ}
{id=26, mp=4, explanation=味方ひとりのHPを約80回復, name=ベホイミ}
{id=27, mp=6, explanation=味方ひとりのHPを完全回復, name=ベホマ}
{id=28, mp=10, explanation=味方全体のHPを約100回復, name=ベホマラー}
{id=29, mp=20, explanation=味方全体のHPを完全回復, name=ベホマズン}
{id=30, mp=8, explanation=味方ひとりを生き返らせる(失敗あり,HPはある程度まで回復, name=ザオラル}
{id=31, mp=15, explanation=味方ひとりを生き返らせる, name=ザオリク}
{id=32, mp=100, explanation=自分の死と引き換えに味方全体を生き返らせる, name=メガザル}
{id=33, mp=2, explanation=味方一体の毒を回復, name=キアリー}
{id=34, mp=2, explanation=味方全体のマヒを回復, name=キアリク}
{id=35, mp=1, explanation=敵1グループを闇の彼方へ消し去る (経験値とお金は得られない), name=ニフラム}
{id=36, mp=0, explanation=敵1体からMPを吸い取る, name=マホトラ}
{id=37, mp=2, explanation=受けた呪文のMPを自分のものにする, name=マホキテ}
{id=38, mp=3, explanation=呪文に対する守備力が上昇, name=マジックバリア}
{id=39, mp=3, explanation=敵1グループの呪文を封じ込める, name=マホトーン}
{id=40, mp=4, explanation=自分にかけられた呪文を敵に跳ね返す, name=マホターン}
{id=41, mp=4, explanation=自分にかけられた呪文を跳ね返す, name=マホカンタ}
{id=42, mp=5, explanation=霧で敵1グループの視界を妨げ,ミスを誘う, name=マヌーサ}
{id=43, mp=3, explanation=敵1体の守備力を50%減少, name=ルカニ}
{id=44, mp=4, explanation=敵1グループの守備力を25%減少, name=ルカナン}
{id=45, mp=2, explanation=味方ひとりの守備力を50%上昇, name=スカラ}
{id=46, mp=3, explanation=味方全体の守備力を25%上昇, name=スクルト}
{id=47, mp=3, explanation=敵1体を眠らせる, name=ラリホー}
{id=48, mp=5, explanation=敵1グループを眠らせる, name=ラリホーマ}
{id=49, mp=5, explanation=敵1グループを混乱させる, name=メダパニ}
{id=50, mp=3, explanation=敵が吐く炎や吹雪の威力を減らす, name=フバーハ}
{id=51, mp=8, explanation=敵1体を突き飛ばす(経験値とお金は得られない), name=バシルーラ}
{id=52, mp=18, explanation=ドラゴンに変身し戦闘能力を上げる, name=ドラゴラム}
{id=53, mp=6, explanation=味方ひとりの攻撃力を2倍にする, name=バイキルト}
{id=54, mp=2, explanation=味方全員が鉄のかたまりとなり, 敵のあらゆる攻撃を無効にする, name=アストロン}
{id=55, mp=20, explanation=?, name=パルプンテ}
{id=56, mp=15, explanation=敵1体のすべての魔法効果を消し去る, name=マジャスティス}
{id=57, mp=20, explanation=全員のすべての魔法効果を消し去る, name=ギガジャスティス}
{id=58, mp=1, explanation=1度行った事のある町・城に一瞬で移動出来る, name=ルーラ}
{id=59, mp=8, explanation=建物や洞窟から一瞬で脱出出来る, name=リレミト}
{id=60, mp=2, explanation=バリア・毒・溶岩等でダメージを受けない, name=トラマナ}
{id=61, mp=2, explanation=宝箱の中身を判別する, name=インパス}
{id=62, mp=4, explanation=自分より弱い敵と遭遇しなくなる, name=トヘロス}
{id=63, mp=2, explanation=建物や洞窟の中で今何階にいるのかわかる, name=フローミ}
{id=64, mp=2, explanation=画面内でアイテムが落ちているとこがわかる, name=レミラーマ}
package com.snail.exam.derby;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.RowProcessor;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
public class DerbyExam {
public static void main(String[] args) throws SQLException {
//String connectionURL = "jdbc:derby:C:\\javadb\\firstdb";
String connectionURL = "jdbc:derby://localhost:1527/C:\\javadb\\firstdb";
try {
Connection con = DriverManager.getConnection(connectionURL);
QueryRunner qr = new QueryRunner();
ResultSetHandler rsh = new MapListHandler();
List result = (List) qr.query(con,"SELECT * FROM MAGIC", rsh);
for(Object m:result){
System.out.println(m);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
package com.snail.exam.derby;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.RowProcessor;
public class DerbyExam {
public static void main(String[] args) throws SQLException {
//String connectionURL = "jdbc:derby:C:\\javadb\\firstdb";
String connectionURL = "jdbc:derby://localhost:1527/C:\\javadb\\firstdb";
final int from = 20;
final int to = 30;
try {
Connection con = DriverManager.getConnection(connectionURL);
QueryRunner qr = new QueryRunner();
ResultSetHandler rsh = new ResultSetHandler() {
@Override
public Object handle(ResultSet rs) throws SQLException {
List result = new LinkedList();
RowProcessor processor = new BasicRowProcessor();
int cnt = 0;
for (; (cnt < from) && rs.next(); cnt++) {
// 読み飛ばし
}
for (; (cnt < to) && rs.next(); cnt++) {
result.add(processor.toMap(rs));
}
return result;
}
};
List result = (List) qr.query(con,
"SELECT * FROM MAGIC ORDER BY ID", rsh);
for (Object m : result) {
System.out.println(m);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
{id=21, mp=10, explanation=敵1体に約650のダメージ, name=ミナデイン}
{id=22, mp=1, explanation=自分の命と引き換えに敵全体にダメージ, name=メガンテ}
{id=23, mp=8, explanation=敵全体にダメージ, name=コーラルレイン}
{id=24, mp=12, explanation=敵1グループにダメージ, name=メイルストロム}
{id=25, mp=2, explanation=味方ひとりのHPを約30回復, name=ホイミ}
{id=26, mp=4, explanation=味方ひとりのHPを約80回復, name=ベホイミ}
{id=27, mp=6, explanation=味方ひとりのHPを完全回復, name=ベホマ}
{id=28, mp=10, explanation=味方全体のHPを約100回復, name=ベホマラー}
{id=29, mp=20, explanation=味方全体のHPを完全回復, name=ベホマズン}
{id=30, mp=8, explanation=味方ひとりを生き返らせる(失敗あり,HPはある程度まで回復, name=ザオラル}