サンプルコード
jdbc.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class SqlConnect {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.cj.jdbc.Driver");
final String jdbcId = "root";
final String jdbcPass = "";
final String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/";
Connection cn = DriverManager.getConnection(jdbcUrl, jdbcId, jdbcPass);
PreparedStatement st = cn.prepareStatement("show databases");
ResultSet rs = st.executeQuery();
while( rs.next() )
{
System.out.println( rs.getString(1));
}
rs.close();
st.close();
cn.close();
}
}
実行結果
$ java -cp './*' jdbc.java
information_schema
mysql
performance_schema
sys
ディレクトリ構成
ソースとJDBCドライバがあるだけ。
JDBCドライバはあらかじめダウンロードしておく必要がある。
クラスパスは指定せず、実行時に引数で指定している。
あと、ローカルホストでMySQLがデフォルトポートで起動している前提。
$ tree
.
├── jdbc.java
└── mysql-connector-java-8.4.0.jar
0 directories, 2 files
Javaのバージョンはopenjdk21
$ java --version
openjdk 21.0.2 2024-01-16
OpenJDK Runtime Environment (build 21.0.2+13-Ubuntu-120.04.1)
OpenJDK 64-Bit Server VM (build 21.0.2+13-Ubuntu-120.04.1, mixed mode, sharing)
背景とユースケース
- Javaのソースファイルモードではスクリプト的にJavaが使える
- 普通はスクリプト的には使わないんだけど、ちょっとしたデータベース接続をしたい時って、JDCBドライバのポータビリティはすごい便利
- 環境依存しないでソースコードのまま実行できるってことで言えばGo言語も優れているんだけど、
go get github.com/go-sql-driver/mysql
などの形で外部リポジトリからのインポートがよくある導線 - 世の中には外部リポジトリからのインターネット経由でインストールできる環境ばかりとは限らないし、バージョンを固定したいケースだってある
- そう考えると「依存モジュールの物理ファイルをコピーするだけで」動作するJavaのライブラリ管理手法は強い
- あたらしい目のJavaなら以下の点でビルドツールに頼らずに気軽に実行できるというのは20年ぶりに触って感動した
- クラスパスをワイルドカード指定できる
- .javaソースを直接実行できる
次の展開
シェバンで実行ファイルとして動かせるとなお面白い。
困ったこと
Javaのソースファイルモードがいまいち良い名前ではないのでググりづらい。Javaのスクリプトモードと言いたいところだけど、JavaScriptとかぶりまくる。