0
0

Javaのソースファイルモードを使って最も浅いJDBCのサンプルを作ってみた

Last updated at Posted at 2024-06-08

サンプルコード

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とかぶりまくる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0