今アプリを作るならDB連携は当然使いますよね?
ということで、今回はDBのアクセスしてみようと思います。
#DBアクセスモジュールの追加
いつものようにmodule.ceylonファイルに追記します。
今回追加するモジュールはこれ。
import ceylon.dbc "1.0.0";
#DBアクセスクラス
ceylon.dbcでは
Sqlクラスが用意されていて
DBにアクセスすることが出来ます!
しかし・・・
Sqlクラスのコンストラクタには
javax.sql.DataSourceの名前が・・・。
Java連携が必須のようです。。
#DB周りの設定
DBと合わせてjavaのDataSourceも必要なので
今回はこちらのDBを使おうと思います。
http://www.h2database.com/html/main.html
オンメモリなDBも使うことも出来て手軽に使えます。
ここでダウンロードしてきたzipを解凍して出てきたjarファイルを
前回 のようにjarファイルを登録します。
ceylon import-jar org/h2 h2-1.3.174.jar
そしてmodule.ceylonファイルにもモジュールを追記します。
import java.base "7";
import org.hsqldb.hsqldb "2.3.1";
これで準備OKです。
それではコードに行ってみましょう。
#コード
import ceylon.dbc { Sql }
import org.hsqldb.jdbc { JDBCPool }
void dbAccess() {
value ds = JDBCPool();
ds.url = "jdbc:hsqldb:mem:db";
ds.user = "sa";
ds.setPassword("sa");
value sql = Sql(ds);
sql.execute("create table messages (id integer, text varchar(20))");
value count = sql.queryForInteger("SELECT count(*) FROM messages");
print(count);
sql.transaction(() {
sql.execute("insert into messages (id, text) values (?, ?)",
0, "hello world");
sql.execute("insert into messages (id, text) values (?, ?)",
1, "goodbye world");
return true;
});
value count2 = sql.queryForInteger("SELECT count(*) FROM messages");
print(count2);
sql.eachRow {
sql = "select id, text from messages";
void body(Map<String,Object> row) {
print("{");
for (key->item in row) {
print("\t``key``: ``item``");
}
print("}");
}
};
}
Sqlクラスを生成するためにDataSourceを生成します。
オンメモリでDBを立ち上げ、テーブルを作って
クエリ実行、インサートなどをしています。
見ただけで何となく分かりますよね。
トランザクションやパラメータ置き換えも良さげです。
Javaのデータソースが必須なのを除けば。。。
実際の業務ロジックでは
基盤部分のみが参照で隠蔽出来る部分かもしれないですけどね。
#まとめ
残念ながら現状ではJava連携必須。
しばらくしたらCeylonモジュールだけで動かせるようになるのかなぁ。