himorogiの日記

主にプログラミングに関することなど。少々ハード(電子工作)についても。

M1 Mac mini と Groovy:SQLite を使う#1

新しく script 言語を覚えるときに、SQLite 周りから始めることが多い。
なぜなら、script 言語の機能にはさほど通宵しなくても、とりあえず面倒な部分は SQLite で片付くので、いきなり実用的な処理が書ける。
そうやって実務で成果を稼ぎながら、空いた時間を script の学習に割ける、という一挙両得。

groovy は SQL サポートがあり、SQLiteJDBC ライブラリ経由で利用できる。
ただ、最初の頃、動作確認するのに、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 );