PC関係の情報など。あとは雑記。

まとブロ

mysql

ds.getConnection() したときに java.lang.NullPointerException

更新日:




今更ながらこんなエラーに遭遇して3時間ぐらい費やしてしまった。DataSource ds = (DataSource) ictx.lookup("some/thing/path");でコンテキストファイルから情報を取得できていたのは確認したが、getConnection()したときに帰ってく値がnullっていうことに困惑した。サーバーに接続失敗をしたエラーではないということだけはなんとかわかった。じゃあどの時点でのエラーなのかというと、サーバーの接続情報は取得できているので、サーバーに接続する前の段階でのエラーということになる。どういうことだよ・・・としばらく意味がわからなかった。

エラーの原因は初歩的な接続ミスだった。私の環境ではtomcatからmysqlに接続しようとしていて、そのときに接続するためのJDBCドライバという専用のライブラリソフトウェアが必要になるわけだけれど、それの選択するバージョンを間違えていた。Mysqlには5.X系と8.X系と大きく分けて2つのバージョンで開発がされていて、5.x系のMysqlに接続するにはmysql-connector-java-5.x.x.jarという名前のファイルが必要で、8.x系のMysqlには mysql-connector-java-8.x.x.jarという名前のドライバで接続する。私の場合は単純に5.x系のMysqlに8.x系のドライバで接続しようとしていたために接続前にnullが返ってきていたというわけ。5より8の方が新しくて性能よさそうだからそっちにしておくかと何も考えずにやってたらこういうことになったのでこんな人は他にいないとは思うけれど接続できないなと思ったら確認を。

例外をキャッチしようとSQLExceptionとかNamingExceptionとか色々設定してみたが結局NullpointerExceptionしかキャッチできなかったのが時間がかかることになってしまった。

おかしいな、8.x系のドライバでもローカルでは問題なく接続できてるんだけどな・・・と思ってたらキャッシュか管理者権限かなんかでデータが更新されていないだけだった。念のために試してみたら当然のように接続はできなかった。

-mysql

Copyright© まとブロ , 2019 All Rights Reserved Powered by STINGER.