【Java:Statementクラスの実装を探す】

Java

JavaからDBへのアクセス処理を実装する際はMyBatis等のフレームワークを使用して実装することも多いと思います。フレームワークを使用せず、StatementクラスでDBへのアクセス処理を実装しているソースコードを目にする機会があり、Statementクラスはどのように実装されているのか?とふと疑問に思ったので調査してみました。

まずは、java.sqlパッケージのStatementクラスを見てみることにします。
jdkにも色々とありますが今回はAmazon Corretto 11にしました。
下記サイトのURLからjdkをダウンロードします。
https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/downloads-list.html

「amazon-corretto-11-x64-windows-jdk.zip」というファイルをダウンロードして解凍します。
解凍すると以下の場所にsrc.zipというファイルがあるのでこれも解凍します。

 amazon-corretto-11.0.19.7.1-windows-x64-jdk>jdk11.0.19_7>lib>src.zip

src.zipを解凍すると以下の場所にStatement.javaというファイルがあります。

 src>java.sql>java>sql>Statement.java

では、Statement.javaを見てどのように実装されているのか見てみることにしましょう。

おや、これはinterfaceですね。

executeQueryやexecuteUpdateメソッドを見ても戻り値の型、メソッド名、引数といったことが書いてあるだけで実装は書かれていません。

では、これらのメソッドの実装はどこにあるのでしょうか。

調べてみたところ、Javaから各種ベンダーが提供するDBにアクセスする際はJDBCドライバというプログラムが必要で、DBに対応したJDBCドライバを各種ベンダーが提供しているようです。
どうやらそのJDBCドライバの中にexecuteQueryやexecuteUpdateメソッドの実装があるようです。見てみましょう。

DBはPostgreSQLを使用することが多いので、PostgreSQLのJDBCドライバを見てみます。
下記サイトのURLからPostgreSQLのJDBCドライバをダウンロードします。
(MySQLのJDBCドライバが欲しい場合は MySQL JDBCドライバ といったワードで検索していただければダウンロードサイトが見つかるかと思います)
https://jdbc.postgresql.org/download/

ダウンロードしたjdkのバージョンは11でしたが、JDBCはJava 8が最新のようですね。
Java 8のDownloadボタンを押下して「postgresql-42.6.0.jar」をダウンロードします。

ふむ、jarファイルですね。そのままでは見れなかったので、拡張子を「.jar」から「.zip」に変更してから解凍しました。解凍したzipの中には色々とファイルが入っています。

ただ、classファイルなのでもうひと手間かけないと中身が見れません。
(残念ながらバイナリを読む力は私にはありません・・・)

そこでclassファイルをデコンパイルするツールをダウンロードします。
下記サイトのURLから「Java Decompiler(jd-gui)」というデコンパイルツールをダウンロードします。
http://java-decompiler.github.io/

「jd-gui-windows-1.6.6.zip」をダウンロードして解凍します。
解凍するとjd-gui.exeという実行ファイルがあるので、ダブルクリックで実行します。
実行すると画像のような画面が表示されます。

こちらの画面にデコンパイルしたいclassファイルをドラッグ&ドロップします。
classファイル単位ではなく、jarファイルをそのままドラッグ&ドロップしても問題ありません。

話を少し戻して、解凍したJDBCドライバのpostgresql-42.6.0を探していくと以下のようなファイルが見つかりました。

org.postgresql.jdbcパッケージのPgStatementというクラスで、Statementクラスをimplementsしています。

executeQueryやexecuteUpdateメソッドの実装が書いてありました。
ふむ、ぱっと見よく分かりませんがこのソースコードを追っていけばStatementクラスの実装を理解することができそうです。

ソースコードはGitの方にもあるのでこっちを見る方がぶっちゃけ早いです。
https://github.com/pgjdbc/pgjdbc/blob/master/pgjdbc/src/main/java/org/postgresql/jdbc/PgStatement.java

このような感じで探していけばStatementクラス以外のConnectionやPreparedStatementクラスなどの実装も見ることができます。

普段何気なく使用しているAPIの実装を見てみるのもより理解が深まりますね。

コメント

  1. Hey there, You have done an incredible job. I’ll definitely digg it and personally recommend to my friends.
    I am sure they’ll be benefited from this website.

タイトルとURLをコピーしました