groovyからJDBCでBLOB、CLOBにデータを挿入する

こんにちは、開発担当の Masa です。

Java のユニットテストに Spock を使っていますが、DB のデータ作成時の groovy の便利さに震えています。

恐らく Java と親和性が最も高いと思われる(信じている) derby を使用します。
適当に create table して、


  def sql = Sql.newInstance("jdbc:derby:パス", "ユーザ名", "パスワード", "org.apache.derby.jdbc.EmbeddedDriver")
  sql.execute("""\
    create table test (
        識別子 bigint generated by default as identity (start with 1, increment by 1),
        名前 varchar(100),
        年齢 int,
        誕生日 timestamp,
        婚姻 boolean,
        画像1 blob,
        画像2 clob)""")
  

データを挿入します。Map を使うと便利です。


  // 画像を複数用意するのが面倒なので全行同じデータ
  // 画像1に使うデータ
  def img = new File(System.getProperty("user.dir") + "\\data\\tori.jpg").bytes
  // 画像2に使うデータ
  def txt = img.encodeBase64().toString()

  def data = [
    ["名前":"猫","年齢":35,"誕生日":Timestamp.valueOf("1979-03-15 00:00:00"),"婚姻":true,"画像1":img,"画像2":txt],
    ["名前":"猫又","年齢":73,"誕生日":Timestamp.valueOf("1941-01-29 00:00:00"),"婚姻":true,"画像1":img,"画像2":txt],
    ["名前":"犬","年齢":39,"誕生日":Timestamp.valueOf("1975-02-24 00:00:00"),"婚姻":false,"画像1":img,"画像2":txt]
  ]

  def dataSet = sql.dataSet('test')
  data.each { dataSet.add(it) }
  

以上です。本当に簡単です。
データが入ってるか確認する場合は以下。


  dataSet.rows().each{ println it }