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 }