まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

Play Framework 2.3 For Java ことはじめ #3 データベース接続(JDBC)編

f:id:masato47744:20140720125846p:plainPlay Framework 2.3 For Java 入門記事一覧

今回は第3回です。

Webアプリケーションといえばやっぱりデータベースはなくてはならない存在です。とりあえずデータベースに接続できなきゃ始まらない。
ってことで、やってみます。まずは、基本を理解したいので、ORMは使わずにJDBCでやります。公式チュートリアルにもJDBCの接続の仕方も書いてあったのですんなりできた。

1. データベース(postgreSQL)の準備

データベースはpostgreSQLpostgreSQLのデータベースはlocalhostに既に作られている前提。データベース名はsampleでユーザー名はtest、パスワードはpasswordとでもしておきましょう。
データベースには、memberというテーブルがあって、名前とEmailだけを持ってるとします。データは適当にinsertしておく。

create table member (
  name varchar(255),
  email varchar(255)
);
insert into member values ('hoge', 'hoge@example.com'), ('fuga', 'fuga@example.com');

余談ですが、実はpostgreSQLを使うのは今回が初めて。show databases\lだったり、AUTO INCREMENTがシーケンスを作るみたいなやり方だったりとかスキーマの考え方が微妙に異なってたりと知らないことたくさんあって困ったw

2. application.confを書き換える

play-javaテンプレートから作ったアプリに直接手を加えていきます。
チュートリアルによるとbuild.sbtにjavaJdbc追加しろって書いてあったけど、既にあったからそれはパス。
apllication.confにpostgresSQLのDBの設定を書く。

db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://127.0.0.1/sample"
db.default.user=test
db.default.password="password"

3. JDBCでmemberを取得する処理を書く

とりあえず試したいだけなので、controllers/Application.javaに処理を書いていく。

まずはimportして、

import play.db.*;

indexメソッドのreturnの前にDBに接続する処理を書く。
ふむ。DB.getConnection()ってするだけでうまいことやってくれるんだね。

Connection connection = DB.getConnection();
try {
    PreparedStatement sql = connection.preparedStatement("select * from member");
    ResultSet rs = sql.executeQuery();
    while (rs.next()) {
        System.out.println(rs.getString("name") + ":" + rs.getString("email"));
    }
} catch (SQLException e) {
    e.printStatckTrace();
}

さぁ、これでいいだろうと思って実行するとエラーが出てて真っ赤な画面。
なにやら、postgreSQLのドライバーを指定してるけど、そんなものないよと言われてる。
公式ページ見ると、MySQLの場合は、libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.18"を追加しろよ書いてある。
ああ、postgreSQLもそういうの持ってこなきゃいけないのか。
依存関係だから、maven postgresqlとかで、ググったら、Maven Repository: org.postgresql » postgresqlにたどりつく。色々バージョンがあるっぽいが、この方のブログを参考にすると JDK7以降は、41を使えばいいっぽい!
なので、build.sbtに次の行を追記する。"org.postgresql" % "postgresql" % "9.3-1101-jdbc41"

これで、サーバー止めて、再びrun。そして、ブラウザをリロードしてみたら、、、

無事成功!

コンソールには、データベースの内容がprintlnされてます。

まとめ

JDBC接続もさらっとうまくいきました。この調子で第4回はPlayの一番標準っぽいORMであるEBeanで接続してみます。第4回はこちら -> Play Framework 2.3 For Java ことはじめ #4 データベース接続(EBean)編