質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.34%
JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

331閲覧

JavaのWebシステムでPostgresに接続したいのですがドライバが読み込めません

NORIAKI

総合スコア1

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2024/12/27 18:30

実現したいこと

JavaでPostgresに接続する

発生している問題・分からないこと

DriverManager.getConnectionを実施する際に下記エラーが発生します
java.sql.sqlexception: no suitable driver found for jdbc:postgresql

ビルドパスにはpostgresql-42.7.4.jarを追加しております(JARの追加で実施しました)
外部JARの追加をしようとするとeclipseが落ちてしまいます
(eclipseのVerは2022-12 (4.26.0))

順序およびエクスポートの画面では上記jarにチェックが入っております

エラーメッセージ

error

1java.sql.sqlexception: no suitable driver found for jdbc:postgresql

該当のソースコード

Java

1try { 2 g_conn = DriverManager.getConnection( g_db_url, g_db_user_id, g_db_pass ); 3 g_conn.setAutoCommit( false ); 4 } catch ( Exception e ) { 5 close(); 6 logErrorMessage( "E101", e ); 7 throw new Exception(); 8 }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

Class.forNameも試してみましたが、ClassNotFoundが発生します
java.lang.classnotfoundexception: org.postgresql.driver

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2024/12/28 01:22

>JavaのWebシステムで ということは、実行の主体は サーブレットで tomcat か何かでしょうか。
NORIAKI

2024/12/28 02:09

その通りです。 具体的には現在はeclipseのデバッグ環境を用いて実行しています Tomcatは10でJavaは17を使用してます。
jimbe

2024/12/28 02:15 編集

eclipse と tomcat は java 環境的には別モノですが、 tomcat の環境内にも postgresql ドライバはあるのでしょうか。
dodox86

2024/12/28 07:06

@質問者 NORIAKIさん まず、 > Class.forNameも試してみましたが、ClassNotFoundが発生します > java.lang.classnotfoundexception: org.postgresql.driver 出力されたエラー情報を転記する場合、正確なものを示してください。 > java.lang.ClassNotFoundException: org.postgresql.driver ではないですか? "org.postgresql.driver"を本当にタイプしていたとして、正しくはClass.forName("org.postgresql.Driver") です。("Driver"、頭が大文字) postgresql-42.7.4.jar は私も最近使っていて使えていたので質問を読んでおかしいな、と思ったのですが、 結論から書くと当方の環境でJavaサーブレットでpostgresql-42.7.4.jarを使うと、"No suitable driver found for..."例外のエラーが再現しました。 Class.forName("org.postgresql.Driver"); を追加し、1回呼び出せばエラーは起きなくなり、問題は解消しました。本来は呼ばなくて良いはずですが、呼ばないとまれに失敗するようです。 (もちろん、WEB-INF/lib/下にJDBCのJARファイルを配置した上の話です) > 外部JARの追加をしようとするとeclipseが落ちてしまいます > (eclipseのVerは2022-12 (4.26.0)) このEclipseの挙動もおかしいですね。不安定なのでしょうか。 当方で試した環境はeclipse IDE 2024-12(Windows版), tomcat-8.5、JavaSE-21、です。
NORIAKI

2024/12/28 17:49 編集

ご返答ありがとうございます エラーメッセージあいまいなものを乗せてしまい申し訳ございません 正確には「java.lang.ClassNotFoundException: org.postgresql.Driver」となります。 また、再起動を行ったところ外部jarの追加が成功しました それだけでも動作せず、jimbe様の指摘のあったサーバ側にjarの追加ができていなかったので サーバ側に追加を行ったところ問題なく動作しました jimbe様 dodox86様 ご回答ありがとうございます。 ベストアンサーに設定したいのですが、コメントのため実施できないようです。。。
dodox86

2024/12/28 18:31

私のコメントは当初のエラーメッセージの提示が不確かなものだったので確認の意味があったのですが、 Class.forName("org.postgresql.Driver"); のコードの記述(<JDBC4.0の仕様では必須ではないはず)が無いとJARファイルを実行時に配置してもエラーが再現したので、その注意も含める為のものでした。 > ベストアンサーに設定したいのですが、コメントのため実施できないようです。。。 jimbeさんの先のコメントが本質ではあるのでjimbeさんの回答がいただければ良いと思うのですが、或いは対処した内容をご自身で投稿して「自己解決」で質問を閉じても良いかもしれません。
jimbe

2024/12/29 02:13 編集

回答に転記しました。 dodox86 さんの Class.forName の実験結果は興味深いものですので、それもまた回答として書いて頂いたほうがコンテンツとして良いと思いますが如何でしょう。
dodox86

2024/12/29 06:15

jimbeさん、コメントありがとうございます。一部、追試した上で回答として投稿しました。
guest

回答2

0

ベストアンサー

個人的に気になったので追試しました。以下、回答として結果を投稿します。


2024/12/28 16:06の私のコメント:

結論から書くと当方の環境でJavaサーブレットでpostgresql-42.7.4.jarを使うと、"No suitable driver found for..."例外のエラーが再現しました。

Class.forName("org.postgresql.Driver");
を追加し、1回呼び出せばエラーは起きなくなり、問題は解消しました。本来は呼ばなくて良いはずですが、呼ばないとまれに失敗するようです。
(もちろん、WEB-INF/lib/下にJDBCのJARファイルを配置した上の話です)


で「まれに失敗する」と書きましたが、まれにではなく"常に"失敗します。

改めてまとめると、以下のようになります。

① JavaサーブレットでJDBCドライバー postgresql-42.7.4.jar を使うと、"SQLException: "No suitable driver found for..."のエラーが再現しました。

plain

1java.sql.SQLException: No suitable driver found for jdbc:postgresql://192.168.1.11:5432/postgres 2 at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:708) 3 at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:230) 4...

Class.forName("org.postgresql.Driver")を1回呼べば、エラー無く使えるようになります。

当方で試した環境は当初、Eclipse IDE 2024-12(Windows版), tomcat-8.5.99、JavaSE-21でした。
実行環境によるかもしれないと思い、他の環境でも試してみましたが、現象は同じです。

Eclipse IDE 2024-12のビルトインのJavaはJavaSE-21ですが、改めて"--release 8"オプション相当でコンパイル~ビルドしたWARファイルを使って以下の2つの実行環境で確認しました。

① Windows 10 Pro

  • Eclipse IDE 2024-12 (4.34.0) のJavaSE-21
  • tomcat8.5 version "8.5.99"

② Raspbian GNU/Linux 11 (bullseye)
※ Raspberry Pi環境です。

  • openjdk version "11.0.25" 2024-10-15
  • tomcat9 version "9.0.43-2~deb11u10"

尚、static void main()のようなスタンドアロンのJavaアプリでCLASSPATHにJDBCドライバーを追加したかたちで実行する場合、Class.forName(...)の記載がなくともエラーは発生せず、正常に実行できます。WEB-INF/lib/下に配置したJARファイルは明示的に指定しなくても自動的に読み込むtomcatのようなJavaサーブレットのアプリケーションコンテナ特有の問題かもしれませんね。確認してはいませんが、PostgreSQLだけでなく他のDBMSのJDBCドライバーでも起こるかもしれません。

投稿2024/12/29 06:14

dodox86

総合スコア9300

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NORIAKI

2024/12/29 17:44

お力添えありがとうございました これで先に進めることができます また、丁寧に対応をいただきとてもうれしかったです
guest

0

(質問へのコメントより)

eclipse と tomcat は java 環境的には別モノですが、 tomcat の環境内にも postgresql ドライバはあるのでしょうか。

投稿2024/12/29 01:59

jimbe

総合スコア13230

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NORIAKI

2024/12/29 17:47

ご回答ありがとうございました ベストアンサーの選び方に失敗してしまい、dodox86様のものを選んでしまいましたが、こちらが解決のものとなります 大変失礼いたしました ありがとうございました
dodox86

2024/12/29 17:58

@NORIAKI さん ベストアンサーは後で変更することもできたと思いますよ。ちょっと不確かですが、可能であればこちらの回答に差し上げてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.34%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問