Web系開発メモ

Java, JavaScript, CSS, HTML など、Webアプリの記事を中心に書いています。

Java:sql2oでSQL実行

sql2o を使って、PostgreSQL に対して簡単な SQL を実行する方法を書いていきます。sql2o を使うと、

  • JDBC の直接利用よりコードが少なくなる
  • SQL実行結果を簡単に Javaオブジェクトに変換できる

などのメリットがあります。

手順1. 依存性の追加

記事「Java共通資源の作成」で作成した pom.xml に、sql2o の依存性を追加します。

db-access/pom.xml(追加部分)

    <dependency>
      <groupId>org.sql2o</groupId>
      <artifactId>sql2o</artifactId>
      <version>1.5.4</version>
    </dependency>

dependencies タグの下に追加すれば大丈夫です。

手順2. モデルの作成

SQL の結果を格納するオブジェクトを作成します。

db-access/src/main/java/model/Memo.java

package model;

import java.sql.Timestamp;

public class Memo {
  public long id;
  public String txt;
  public Timestamp updated, created;
  public String toString() {
    return new StringBuilder(
      ).append(id).append(", "
      ).append(txt).append(", "
      ).append(updated).append(", "
      ).append(created
    ).toString();
  }
}

toString() はデータ確認用です。

手順3. Mainクラスの作成

sql2o で SQL を実行する Mainクラスを作成します。

db-access/src/main/java/lib/Sql2oMain.java

package lib;

import org.sql2o.Connection;
import org.sql2o.Sql2o;

import model.Memo;

public class Sql2oMain {
  public static void main(String[] args) {
    Sql2o sql2o = new Sql2o(
      "jdbc:postgresql://localhost/test",  // url
      "neko", "cat" // user, password
    );
    try (Connection con = sql2o.open()) {
      //-> insert 実行
      Long id = con.createQuery(
        "insert into memo (txt) values (:txt) returning id"
      ).addParameter("txt", "sql2o").executeAndFetchFirst(Long.class);
      System.out.println("ID: " + id);
      //-> select 実行
      Memo memo = con.createQuery(
        "select id, txt, updated, created from memo where id = :id"
      ).addParameter("id", id).executeAndFetchFirst(Memo.class);
      System.out.println("Memo: " + memo.toString());
      //-> delete 実行
      con.createQuery(
        "delete from memo where id = :id"
      ).addParameter("id", id).executeUpdate();
    }
  }
}

コネクション取得や SQL実行は、sql2o の API を使っています。内容としては、テーブル memo に対して insert, select, delete をしています。

手順4. 動作確認

事前に PostgreSQL を起動して、データベース・ユーザ・テーブルを作成しておきます。作成方法は「DB環境の準備」に書いてます。

上の Sql2oMain を実行すると、

ID: 36
Memo: 36, sql2o, 2017-11-17 12:03:55.225018, 2017-11-17 12:03:55.225018

といった文字列が出力されて、SQLが実行されたことを確認できます。最後に psql で ID36 を確認すると、きちんと削除されてそうです。

test=> select * from memo where id = 36;
 id | txt | updated | created
----+-----+---------+---------
(0 行)