LoginSignup
0
0

More than 5 years have passed since last update.

今アプリを作るなら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モジュールだけで動かせるようになるのかなぁ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0