はじめに
Windowsバッチでもデータベースの値を取得することができます。
今回、WindowsバッチでSQLiteのデータベースの値を取得する方法を解説します。
ただし、今回解説する方法はWindows上に存在するDBの値を取得する方法に限りますので、
別サーバー上のDBの値を取得する方法ではないのでご注意ください。
1. サンプルコマンド
まずサンプルとして、以下の情報のときsample_tableのvalueを取得する例をあげます。
SQLite起動exeファイル:sqlite3.exe
DBファイル:sampleDb.sqlite
取得したいテーブル:sample_table
取得したいカラム:value
set SQLCMD=sqlite3.exe "sampleDb.sqlite" "select value from sample_table;"
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%a in (`%SQLCMD%`) do set String=%%a
2. 構文
2-1. SQL実行コマンド
SQLite起動exeファイルへDBファイルとSQL文を引数として渡すことで
SQLの実行結果を取得することができます。
SQLite起動exeファイル "DBファイル" "SQL文"
各ファイルのパスですが、実行するbatファイルからの相対パスもしくは絶対パスのどちらも指定することが可能です。
上記コマンドを実行すると、SQL文の結果が戻り値として返却されます。
2-2. コマンド実行結果の取得
まず、for文を使用するときは以下のコマンドをあらかじめ実行します。
setlocal enabledelayedexpansion
ERRORLEVELコマンドを使用してエラー判定したいときなどに
このコマンドがないと正常終了してもエラーとしてリターンコードが返却されてしまいます。
理由としては、for文を実行している間にERRORLEVELコマンドが実行されるためです。
まあここはfor文を使うときはおまじないと思っていただければと思います。
なくても動きますが、for文を使用するときは記載するくせをつけましょう。
次にfor文の解説をします。
for /f "usebackq delims=" %%a in (
コマンド) do set String=%%a
各オプションは以下の役割をしてます。
オプション | 役割 |
---|---|
/f | コマンドの実行結果を行単位で変数に読み込み繰り返し処理が行えるオプションです。 |
delims=" | デリミタ(区切り)を無効にする。 |
usebackq=コマンド
|
`(バッククォート)で囲まれた文字列をコマンドとして実行する。 |
for文でコマンドを実行し、戻り値を%%aに一時的に格納し、
Stringに代入しているというイメージです。
最後にもう一度サンプルプログラムをのせておきます。
set SQLCMD=sqlite3.exe "sampleDb.sqlite" "select value from sample_table;"
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%a in (`%SQLCMD%`) do set String=%%a
ぜひ活用してみてください。
さいごに
2020年から個人ブログはじめました!
フリーランスエンジニアになって得た知識と経験をもとに、フリーランスエンジニアに関する情報をはじめ、IT技術情報や業界情報、エンジニアライフハック等のコンテンツを配信していく予定です。
まだまだ記事数は少ないのですが、週単位で更新してますので、もしご興味ございましたら、みていただけると嬉しいです。
さいごまでお読みいただき、ありがとうございました。