見出し画像

コマンドプロンプトからSQL実行(Apache Derby-02,Win,cmd,Java19)

概要

Apache Derby付属のijに標準入力からSQLコマンドをインメモリモードで起動したApache Derbyに渡して実行結果を得る。テスト用SQLはSYSIBM.SYSDUMMY1を使用した(OracleでDUALを使用する場合と同様)Select文で簡単な計算(5+4*3/2-1)の結果を表示するものを使用。

C:\Users\User>prompt $v$g$s

Microsoft Windows [Version 10.0.22621.1105]> set DERBY_HOME="C:\dbtool\db-derby-10.16.1.1-bin"

Microsoft Windows [Version 10.0.22621.1105]> echo %JAVA_HOME%
C:\Program Files\Eclipse Adoptium\jdk-19.0.2.7-hotspot\

Microsoft Windows [Version 10.0.22621.1105]> java -version
openjdk version "19.0.2" 2023-01-17
OpenJDK Runtime Environment Temurin-19.0.2+7 (build 19.0.2+7)
OpenJDK 64-Bit Server VM Temurin-19.0.2+7 (build 19.0.2+7, mixed mode, sharing)

Microsoft Windows [Version 10.0.22621.1105]> SET /P="select 5+4*3/2-1 from SYSIBM.SYSDUMMY1;"<NUL | java -p %DERBY_HOME%\lib -Dij.connection.+="jdbc:derby:memory:+;create=true" -m org.apache.derby.tools/org.apache.derby.tools.ij
ijバージョン10.16
+* -    jdbc:derby:memory:+
*=現行接続
ij> 1
-----------
10

1行が選択されました
ij>
Microsoft Windows [Version 10.0.22621.1105]>

しかし、MS-DOSv3くらいの昭和の時代から何十年間も使用してきている「DOSプロンプト」でのコマンド動作であり、おそらくユーザの入力した結果を標準出力するための機能にNULを送り込んでこう動作させるのだろうとは推測できるのであるが。。。個人的には直感では思いつかない。。。というか、いまだに腹落ちしない記法である。しかし、echoで引用符やエスケープシーケンスや改行で悩むより、ずっと普通に動く。
なお、以下の@echoとSET /Pをパイプで繋ぐ方法でも同様の動作になる。こちらもなぜこのような動作になるのか少なくとも個人的には直感では思いつかない。

Microsoft Windows [Version 10.0.22621.1105]> @echo | SET /P="select 5+4*3/2-1 from SYSIBM.SYSDUMMY1;" | java -p %DERBY_HOME%\lib -Dij.connection.+="jdbc:derby:memory:+;create=true" -m org.apache.derby.tools/org.apache.derby.tools.ij
ijバージョン10.16
+* -    jdbc:derby:memory:+
*=現行接続
ij> 1
-----------
10

1行が選択されました
ij>
Microsoft Windows [Version 10.0.22621.1105]>

実行環境

Microsoft Windows [Version 10.0.22621.1105]> VER

Microsoft Windows [Version 10.0.22621.1105]

Microsoft Windows [Version 10.0.22621.1105]> java -version
openjdk version "19.0.2" 2023-01-17
OpenJDK Runtime Environment Temurin-19.0.2+7 (build 19.0.2+7)
OpenJDK 64-Bit Server VM Temurin-19.0.2+7 (build 19.0.2+7, mixed mode, sharing)

Microsoft Windows [Version 10.0.22621.1105]> java -p %DERBY_HOME%\lib -Dij.connection.+="jdbc:derby:memory:+;create=true" -m org.apache.derby.tools/org.apache.derby.tools.ij
ijバージョン10.16
+* -    jdbc:derby:memory:+
*=現行接続
ij> exit;

Microsoft Windows [Version 10.0.22621.1105]> WINVER

Microsoft Windows [Version 10.0.22621.1105]>

しかし、なぜVERコマンドの出力で素直に「Winodws11」と出てくれないのだろうか。WINVERではコマンドプロンプト内ではないが、以下の表示がされる。

WINVER出力

参照

Windows環境でJavaを使用する。
Windows環境のJavaでApache Derbyを使用する。
シェルからSQL実行する(Apache Derby-01,MAC,zsh,Java19)
PowershellプロンプトからSQL実行(Apache Derby-03,Win,Powershell v5,Java19)

この記事が気に入ったらサポートをしてみませんか?