- - PR -
修正:JAVAからデータベースへのアクセス
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-15 09:47
すみません、先ほど投稿させていただいたのですが、
変な顔文字が混じってしまったので、再度投稿させて頂きます。 はじめまして、宜しくお願いいたします。 現在、JavaプログラムからPostgresSQLにアクセスしようと試みております。 環境は以下の通りです。 OS:Redhat7.3 J2SDK:1.4.2_09 PostgreSQL:postgresql-7.3.3 JDBC:pg73b1jdbc3.jar(rpmパッケージに含まれていたもの) 上記環境で、Javaのソースをコンパイルして実行するとエラーが表示されます↓ [root@localhost javahello]# javac HelloWorldJDBCPostgreSQL.java [root@localhost javahello]# java HelloWorldJDBCPostgreSQL java.lang.ClassNotFoundException: org.postgresql.Driver at java.net.URLClassLoader$1.run(URLClassLoader.java:199) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:141) at HelloWorldJDBCPostgreSQL.main(HelloWorldJDBCPostgreSQL.java: JDBCのドライバ(rpmパッケージに含まれていたもの)が原因かと思い、 学習の参考にしていたURLに載っている別のドライバも 追加してみたのですが結局同じエラーとなってしまいました。 何が原因でしょうか?どなたかご教授の程、宜しくお願い申し上げます。 __参考:./bash_profileの中身抜粋_____________________ CLASSPATH=.:$JAVA_HOME/lib/tools.jar:/usr/local/tomcat/common/lib/servlet.jar pg73b1jdbc3.jar:jdbc7.1-1.2.jar export JAVA_HOME PATH CLASSPATH _________________________________ __参考:Javaのソース(HelloWorldJDBCPostgreSQL.java)________ import java.sql.*; public class HelloWorldJDBCPostgreSQL { public static void main(String[] args) { try { // ドライバクラスをロード Class.forName("org.postgresql.Driver"); // PostgreSQLの場合 // データベースへ接続 Connection con = DriverManager.getConnection("jdbc:postgresql:hellodb", "postgres", ""); // PostgreSQLの場合 // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT * FROM HELLO_WORLD_TABLE"; // クエリーを実行して結果セットを取得 ResultSet rs = stmt.executeQuery(sql); // 検索された行数分ループ while(rs.next()){ // NOを取得 int no = rs.getInt("NO"); // 言語を取得 String lang = rs.getString("LANGUAGE"); // メッセージを取得 String msg = rs.getString("MESSAGE"); // 表示 System.out.println(no + " " + lang + " " + msg); } // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } ___________________________________ ※参考URL:http://www.hellohiro.com/jdbcpostgresql.htm | ||||||||
|
投稿日時: 2005-09-15 09:59
FAQですな..
>java.lang.ClassNotFoundException: org.postgresql.Driver JDBCドライバにクラスパスが通っていません。 JDBCのjarをどこにおいてますか? #というか、エラーメッセージを読まないor読めない人が多すぎ.. [ メッセージ編集済み 編集者: ハツキタツミ 編集日時 2005-09-15 10:00 ] | ||||||||
|
投稿日時: 2005-09-15 10:21
こんにちは。
このCLASSPATH設定だと、jdbcがカレントディレクトリにないとだめなようですが、そうなってますか? あと、servlet.jarとpg73b1jdbc3.jarの間にコロン(:)がないですが、これはコピペミスでしょうか? 参考にされ他サイトでは、
となってますので、CLASSPATHには/usr/share/pgsql/jdbc7.1-1.2.jarを設定することになると思います。 以上ご参考になれば。 | ||||||||
|
投稿日時: 2005-09-15 10:23
PostgreSQLのjdbc接続はやったことないですが、
>java.lang.ClassNotFoundException: org.postgresql.Driver を見て 1)このクラスが自分の環境でロードできるかの単純なプログラムをつくってみる。 2)このクラスのファイルがpg73b1jdbc3.jar:jdbc7.1-1.2.jarのいずれかに はいってないか見てみる。 あたりをとりあえずして、ロードできない。見つからない。なら 3)どこにはいっているべきクラスファイルか?それらしきjarとかは見当たらないか? 4)そもそも、このクラスが使用されること自体誤っているのか? なんかを疑ったり、考えたりします。 で、pg73b1jdbc3.jar:jdbc7.1-1.2.jarのいずれかにあるんですかね? それなら、なぜロードできないのかクラスパスの設定を疑うとか。 | ||||||||
|
投稿日時: 2005-09-15 10:29
あっ、でも
1つ前の私のやったようなことしなくても、ここにカキコすれば 2、3みたいな原因とか確認方法までアドバイスもらえるんですね。 面倒なこと考えたり、したりしないで投稿するほうが賢いかな? でもカキコするのは、それはそれで手間ですけど。 | ||||||||
|
投稿日時: 2005-09-15 10:36
・・・(・・) エラーメッセージを読めば良いのでは? もしくは参考書籍か参考サイトを見れば良いのでは? 書き込む手間も省けますよ。 # tk919さんへの書き込みではありません、あしからず。 [ メッセージ編集済み 編集者: さる 編集日時 2005-09-15 10:39 ] | ||||||||
|
投稿日時: 2005-09-15 11:00
みなさん、ご返答ありがとうございます。感謝感謝でございます。
お恥ずかしいばかりですが、パスを通したつもりが通っておりませんでした。。 パスを修正後に再度実行したところ、お蔭様で先程までのエラーは無くなりました。 しかし、今度は次のエラーが。。。。 [root@localhost javahello]# java HelloWorldJDBCPostgreSQL A connection error has occurred: FATAL: Password authentication failed for user "postgres" at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJ dbc1Connection.java:196) at org.postgresql.Driver.connect(Driver.java:120) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at HelloWorldJDBCPostgreSQL.main(HelloWorldJDBCPostgreSQL.java:14) 上記のエラーから、今度はpostgresユーザから実行してみました。 ※今まではrootで実施しておりました [root@localhost javahello]# su postgres bash-2.05a$ java HelloWorldJDBCPostgreSQL ←パーミッション権限は付与済み Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldJDBCPostgreSQL 上記のエラーが表示されてしまいます。。 ちなみに、PostgreSQLだけは以下のサイトを参考にしてインストールを 行ったのですが、TCP/IPの接続やセキュリティの設定に問題があるのでしょうか? ※参考URL http://www.itmedia.co.jp/enterprise/0307/18/epn20_13.html(セキュリティ設定) http://www.itmedia.co.jp/enterprise/0307/18/epn20_12.html(TCP/IP接続) 再度、お気付きの点がございましたらご指摘願います。 宜しくお願い申し上げます。 | ||||||||
|
投稿日時: 2005-09-15 11:09
実行するユーザではなく、接続時に渡すプロパティの問題ではないでしょうか。
正しくパスワードを設定していますか? |
1|2|3|4
次のページへ»