Grooy スクリプトをそのまま渡して実行する Spring Boot+Picocli ベースのコマンドラインアプリを作成する ( その5 )( CSV ファイルのデータをテーブルに登録する Groovy スクリプトを作成する )
概要
記事一覧はこちらです。
参照したサイト・書籍
目次
手順
CSV ファイルのデータを MySQL の testdb の book テーブルに登録する
groovy-script-executor/src/main/groovy/sample の下に CsvFileToBookTable.groovy を新規作成し、以下のコードを記述します。
- 今回は commit を明記する方式にします。トランザクションの処理が始まる前に
sql.connection.autoCommit = false
を記述して AutoCommit を OFF にします。 - CSV ファイルの publications.csv は PublicationsTableToFileUsingUnivocityParsers.groovy が出力したファイルを使用します。ただしそのままだと全部で 154,729件あって多いので、先頭から 20件だけ使用します。
- publications.csv の title_author には title だけか、
/
を区切り文字として title と authror が入っているので、/
で分割して author はデータがある時だけセットします。
package sample import com.univocity.parsers.annotations.Parsed import com.univocity.parsers.common.processor.BeanListProcessor import com.univocity.parsers.csv.CsvParserSettings import com.univocity.parsers.csv.CsvRoutines import groovy.sql.Sql class CsvFileToBookTable { static class CsvRecord { @Parsed(index = 0, field = "isbm") String isbm @Parsed(index = 1, field = "title_author") String title_author } static void main(args) { def sql = Sql.newInstance("jdbc:mysql://localhost:3306/testdb?sslMode=DISABLED&characterEncoding=utf8", "testdb_user", "xxxxxxxx", "org.mariadb.jdbc.Driver") sql.connection.autoCommit = false CsvParserSettings settings = new CsvParserSettings() settings.format.lineSeparator = "\r\n" settings.headerExtractionEnabled = true BeanListProcessor<CsvRecord> rowProcessor = new BeanListProcessor<>(CsvRecord) settings.processor = rowProcessor sql.execute("truncate table book") new File("publications.csv").withReader { reader -> CsvRoutines csvRoutines = new CsvRoutines(settings) for (CsvRecord csvRecord : csvRoutines.iterate(CsvRecord, reader)) { String[] titleAndAuthor = csvRecord.title_author.split(" / ") sql.execute(""" insert into book (isbm, title, author) values (:isbm, :title, :author) """, isbm: csvRecord.isbm, title: titleAndAuthor[0], author: titleAndAuthor.size() == 2 ? titleAndAuthor[1] : null) } } sql.commit() sql.close() } }
CsvFileToBookTable.groovy を D:\tmp
にコピーし gse CsvFileToBookTable.groovy
を実行すると book テーブルにデータが登録されます。
履歴
2021/11/07
初版発行。