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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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で作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

16067閲覧

JavaのWebアプリケーションからJDBCドライバーが読み込めない

Linkey

総合スコア77

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で作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2017/02/26 06:15

Mac OSでJavaのWebアプリケーションを開発している者です。
PostgreSQLを使ってデータベースの接続とテーブル検索を行うプログラムを作成しているのですが、実行するとjava.lang.ClassNotFoundException: org.postgresql.Driverというエラーが発生します。

【手順】
1.PostgreSQLのサイトから最新バージョンのJDBCドライバをダウンロードする
2.Eclipseのビルドパスから外部jarとしてJDBCドライバを追加する
3.作成したWebアプリケーションを起動する
4.DBへの接続するタイミングでClassNotFoundExceptionが発生する

作成したソースコードを載せます

java

1package util; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8 9/** 10 * データベースの接続及びデータベースの操作を行います 11 */ 12public class ConnectionDatabase { 13 14 static Connection con; 15 static PreparedStatement st; 16 static ResultSet rs; 17 18 public static void main(String[] args){ 19 try { 20 Class.forName("org.postgresql.Driver"); 21 String url = "jdbc:postgresql:test"; 22 String user = "administrator"; 23 String pass = "password"; 24 25 con = DriverManager.getConnection(url, user, pass); 26 String sql = "SELECT * FROM customer_info"; 27 st = con.prepareStatement(sql); 28 rs = st.executeQuery(); 29 int count = 0; 30 while(rs.next()){ 31 count++; 32 System.out.println(rs.getString("customer_id")); 33 } 34 35 if(count == 0){ 36 System.out.println("0件でした"); 37 }else{ 38 System.out.println("ヒットしました"); 39 } 40 41 42 } catch (Exception e) { 43 System.out.println("例外が発生しました"); 44 }finally{ 45 try { 46 rs.close(); 47 st.close(); 48 con.close(); 49 } catch (SQLException e) { 50 System.out.println("リソースの解放に失敗しました"); 51 } 52 53 } 54 } 55}

テスト用のクラスからはドライバーが読み込まれて検索結果が表示されるのですが、サーブレットから呼び出すとエラーになってしまいます。

DB接続テストクラス(単体で動かすとエラーが発生せずに検索結果が取得できる)

java

1/** 2 * データベースの接続及びデータベースの操作を行います 3 */ 4public class ConnectionDatabaseTest { 5 6 static Connection con; 7 static PreparedStatement st; 8 static ResultSet rs; 9 10 public static void main(String[] args){ 11 try { 12 Class.forName("org.postgresql.Driver"); 13 String url = "jdbc:postgresql:test"; 14 String user = "administrator"; 15 String pass = "password"; 16 17 con = DriverManager.getConnection(url, user, pass); 18 String sql = "SELECT * FROM customer_info"; 19 st = con.prepareStatement(sql); 20 rs = st.executeQuery(); 21 int count = 0; 22 while(rs.next()){ 23 count++; 24 System.out.println(rs.getString("customer_id")); 25 } 26 27 if(count == 0){ 28 System.out.println("0件でした"); 29 }else{ 30 System.out.println("ヒットしました"); 31 } 32 33 34 } catch (Exception e) { 35 System.out.println("例外が発生しました"); 36 }finally{ 37 try { 38 rs.close(); 39 st.close(); 40 con.close(); 41 } catch (SQLException e) { 42 System.out.println("リソースの解放に失敗しました"); 43 } 44 45 } 46 } 47}

今回初めてMacで開発をしているのですが、Windowsと同じように環境設定にJDBCドライバを追加すれば良いのでしょうか?
解決方法をご存知の方がいましたら教えて頂けないでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

WEB-INFのlibの下にドライバを配置しても
同様でしょうか?

投稿2017/02/26 08:23

編集2017/02/26 08:23
sinmei99

総合スコア88

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

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

Linkey

2017/02/28 15:15

ありがとうございました。無事にデータベースへの接続ができました。ちなみに外部jarはすべてWEB-INFのlibに追加したほうがよいのでしょうか?外部jarの設定にあまり詳しくないので...どうしてデータベースに接続できるようになったのか?なぜライブラリへの追加だけでは不十分なのか疑問です。せっかく回答していただいた上で質問して申し訳ないのですが、ご存知でしたら教えていただけないでしょうか?
退会済みユーザー

退会済みユーザー

2017/03/01 22:00 編集

横から失礼します。warを展開すると、フォルダ「META-INFとWEB-INF」と「htmlファイル等(フォルダ含む)になります。WEB-INFの中はclassと『lib』があり、必要なjarはこの『lib』に居る必要があります。『eclipseの「外部jar」の設定』は、warに反映されません。。。サーブレットとテストクラスでの動作の違いはeclipse内でのjarの参照動作からその様になるのかと想像してます。(Tomcatを使用しているのであれば、Tomcatのlibにjarを置いてeclipseでのTomcatを内蔵からそのTomcatに変更すれば、WEB-INFのlibに置かなくても良い、という動かし方もあります。この場合、eclipseではソースが必要とするjarを「eclipseの「外部jar」で設定』しておく必要があります。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問