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 }