M1 Mac mini と Groovy:SQLite を使う#1
新しく script 言語を覚えるときに、SQLite 周りから始めることが多い。
なぜなら、script 言語の機能にはさほど通宵しなくても、とりあえず面倒な部分は SQLite で片付くので、いきなり実用的な処理が書ける。
そうやって実務で成果を稼ぎながら、空いた時間を script の学習に割ける、という一挙両得。
groovy は SQL サポートがあり、SQLite も JDBC ライブラリ経由で利用できる。
ただ、最初の頃、動作確認するのに、bug なのか仕様なのか振り分けるために、外部コマンドとして SQLite を起動する方法も確認しておきたい。
というわけで、
'SQLite3 Proverb.db "CREATE TABLE Proverb ( id, name, phrase );"'.execute()
これを groovyConsle から実行した結果が以下
groovy> 'SQLite3 Proverb.db "CREATE TABLE Proverb ( id, name, phrase );'.execute() Result: Process[pid=36926, exitValue="not exited"]
ls した結果、Proverb.db は生成されていた。
確認のため、terminal から SQLite に入ってみる…
hoge ~ % sqlite3 Proverb.db SQLite version 3.37.0 2021-12-09 01:34:53 Enter ".help" for usage hints. sqlite> .tables sqlite> .schema sqlite>
.tables も .schema も戻りはブランクなので、CREATE 文が実行されてない。
多分、外部コマンド実行の際に第二パラメータが引き渡されてない。
外部コマンドは、文字列の他に、配列として指定することもできるので、今度は配列で渡してみた。
※予め rm Proverb.db で db ファイルは削除済み
["SQLite3","Proverb.db","CREATE TABLE Proverb ( id, name, phrase );"].execute()
再び groovyConsle から実行した結果が以下
groovy> ["SQLite3","Proverb.db","CREATE TABLE Proverb ( id, name, phrase );"].execute() Result: Process[pid=35729, exitValue="not exited"]
確認のため、terminal から SQLite に入ってみる…
hoge ~ % sqlite3 Proverb.db SQLite version 3.37.0 2021-12-09 01:34:53 Enter ".help" for usage hints. sqlite> .tables Proverb sqlite> .schema CREATE TABLE Proverb ( id, name, phrase ); sqlite>
今回は、第二パラメータの SQLクエリを正常に実行できていた。
外部コマンドで SQLite を弄れると何が便利かというと .comand が利用できる。
SQLite で .schema を実行し、結果を受け取りたいので .execute().text を使う。
["SQLite3","Proverb.db",".schema"].execute().text
groovyConsle から実行した結果が以下
groovy> ["SQLite3","Proverb.db",".schema"].execute().text Result: CREATE TABLE Proverb ( id, name, phrase );