• 締切済み

サーブレットからJavaBeansを利用したDB接続について

初歩的な質問ですみません。 下記環境で、Javaを勉強しています。 教材 :やさしいJava 活用編 Lesson8 Sample5 実行環境:j2sdk1.4.1_07 (教材では、j2sdk-1_4_0) Tomcat 5.0(教材では、Tomcat-3.2.3) IE6.0 サーブレットでリクエストを受付け、JavaBean経由でDBに接続(Access2000を利用)しDBの中身をJSPで表示するいう流れです。サーブレットのURLを指定して実行してもjspページには何も表示されません。 ログファイルには下記エラーが記述されています。 勘違いか、何らかの初歩的なミスだと思いますが、解決方法が見つかりません。解決方法をご存知の方教えて下さい。よろしくお願いします。 尚、JDBC-ODBCドライバを使用していますが、サーブレットからではなくJavaアプリからではAccess2000のDB参照更新が出来ています。サーブレットから(JavaBean経由)だとうまくいかないという事象です。 java.sql.SQLException: [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。 at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6879) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7036) at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3028) at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323) at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at CarDB.CarDBBean.<init>(CarDBBean.java:22) at Sample5.doGet(Sample5.java:16) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at ~略~

みんなの回答

回答No.6

#5の補足です。 ここでは、海外のサイトの内容などにより、Tomcat5のバグではないか、との安易な憶測をしてしまいましたが、もうちょこっとだけ調べ直してみたところ、どうやらそうではなさそうです。(Apache Software Foundationのみなさん、ごめんなさい。) 主な原因は、やっぱしURLにありそうです。(たぶん、Windowsプラットフォーム限定だと思われる。) まず初めに、以下のサイトを御覧になってください。(ステータスは、「修正しないでしょう」で閉じています。) [Bug ID]4093794 [Synopsis]JDBC-ODBC driver does not accept DSN-less connection URLs http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4093794 で、そこから派生するMicrosoftの公式サイト http://support.microsoft.com/kb/q165866/ 「DSNレス接続」に関する分かりやすい解説 http://www.geocities.co.jp/SiliconValley-PaloAlto/6502/messages/1184.html 以下のサイトもたまたま見付けましたので、開発ソフトは「Visual J#」ですが、質問者さんにはもう一度、データソース名がJavaソースコード内と一致しているのかどうか(スペースが前後にないか、もしくは入っているのかどうかなど)の確認をお願いします。 http://msdn2.microsoft.com/ja-jp/library/9bbt582h.aspx Javaで「DSNレス接続」をする方法については今も分かりませんが、もしかしたらデータベースのカテゴリ内で質問すれば、何かいい方法が見付かるかも知れません。

nankurunaisa2006
質問者

お礼

色々と有難うございます。 精鋭揃いのApache Software FoundationにあってTomcat5のこうした形でのバグは確かに考えにくいですね。 データソース名は再度確認しましたが問題ないという認識です。 MySQLで実験してみようとしていますが、ルートパスワードを忘れてしまいログインすらできず。そちらの対応にいま苦労しています。 DSNレス接続についても少し勉強してみます。

回答No.5

>もしOffice2000Proをお持ちでしたらAccessも同梱されていると思いますので、当該ソースでアクセス可能かどうか実験してみていただけませんでしょうか。 小生の自宅にあるOffice XPは、Accessが同梱されていないタイプです。(とほほ…。)ただ、[JavaHouse-Brewers:45130]のスレッド内では、Access2000にも接続できていたそうですので、RDBMS固有の問題ではなく、環境によっては出来るものもあれば、出来ないものもあるらしいとのことです。 その他にも、以下のサイトの過去ログ[1043]では、JDBC:ODBCのURL指定方法に問題があるのではないかという所まではきているのですが、そこで終っています。 http://www.hellohiro.com/bbs/7.html 国内のサイトでは、これが限界でしょう。なので、今度は海外へ飛びます。 まず最初は、公式サイトから。 http://forum.java.sun.com/thread.jspa?threadID=745996 このサイトの一番下から2番目の回答の所では、jdk 1.5のregisterDriverメソッドを使えばいいと、書かれています。以下のサイトの3番目でも、Windowsのregistryに関する記述がありますが、信憑性については微妙です。 http://www.softwaretree.com/products/jdx/faq/trblShoot.htm 他にも、こちらのサイトでは、最終的に質問者さん自身が次のように述べています。 http://www.thescripts.com/forum/thread18803.html 「The problem is not url, because it run on java class but not with jsp. Probably the problem is a tomcat configuration or bug.」 実際に、以下のサイトでもTomcat 4.0までは正常に動いていたのに、Tomcat 5.0にアップグレードしてから急にデータベースに接続できなくなった、と言っています。 http://forum.java.sun.com/thread.jspa?threadID=541192&messageID=2623368 以上を踏まえた上で、最終的には以下のような対応になるかと。 1jdk 1.5をインストールして、registerDriverメソッドを使ってみる。 2Tomcat 4の最新バージョンをインストールして、そちらからもデータベース接続できないか、試してみる。 3ACCESS2000をあきらめて、他のフリーRDBMS(MySQLやPostgreSQLなど)に乗り換えてみる。

  • yuki22
  • ベストアンサー率28% (8/28)
回答No.4

NO1の者です。 あのあの、これも違うとおもうのですが一様。 DBの更新は出来るってことですよね?? SessionをつかってないからBeansが活かされてないのかな?って思うのですが・・ちがいますよね^^; また考えてお答えしますね。

nankurunaisa2006
質問者

お礼

ご回答有難うございます。 Sessionを使うのはユーザを特定管理するためですよね。 それは実際はクッキーとしてWebブラウザに文字列を保存している事になるので、初回からアクセスできないというのはもっと根本的な原因かと思うのですが。。。 実験してみますね。

回答No.3

インフォシークのトップページにて、以下の一文をまるごとコピペして、検索。すると、java-houseのサイトを発見できます。 「データソース名および指定された既定のドライバが見つかりません。」 [JavaHouse-Brewers:33100]の一番下の方にあるスレッドからさらに、[JavaHouse-Brewers:27392]のスレッドが見付かります。これによると、ODBCのデータソース設定に起因しているそうです。 33100は、「Access97」で、27392の方は「SqlServer 6.5」とのことですが、エラーの内容がほぼ同じなのでこれじゃないかと思います。ただ、「Access2000」の方は使用したことがないので、動作未確認です。 それ以外で考えられることとしては、接続する際のユーザ名を指定していないことでしょうか?ここのサイトの過去ログでもよく出てきますが、ユーザ名を""にしていると最初の接続の時のみ、なかなかうまくいかないことがあります。(パスワードは何も指定していなければ、""でもOK。)私自身、Linux+MySQLにて、なかなか原因が分からず、苦労したことがあります。 質問者さんの場合は、引数が「usr」となっているので、そこに何か適当の文字列を設定してから、再度確認してみてください。(通常、Windowsでは、「admin」、Linuxでは「nobody」を使うことが多いです。)

nankurunaisa2006
質問者

お礼

ご回答有難うございます。 JavaHouse-Brewersの記事については当方でも確認し、 アクセス権限に問題があるのかを試してみました。 ■データソースはユーザーデータソースに指定してもシステムデータソースに指定しても結果は同様(SQLExceptionの発生)でした。 ■また、ユーザ名を""でなくAdministratorとしても結果は同様でした。 もしOffice2000Proをお持ちでしたらAccessも同梱されていると思いますので、当該ソースでアクセス可能かどうか実験してみていただけませんでしょうか。 依然原因が不明です。

  • dekopa-
  • ベストアンサー率42% (161/378)
回答No.2

>データ ソース名および指定された既定のドライバが見つかりません とあるので、文字通りデータソース名が間違っているのでしょう。 ODBCの設定をして、Javaアプリからアクセスできているなら、データソースの設定自体はできているはずです。 それが見つからないなら、おそらく名前を打ち間違えていませんか? >at CarDB.CarDBBean.<init>(CarDBBean.java:22) この辺が怪しいです。JDBCDriverManager.getConnectionに渡している引数をチェックしてください。

nankurunaisa2006
質問者

お礼

ご回答いただきまして有難うございます。 CarDBBean.javaでは、次のように処理しています。 //接続の準備 String drv = "sun.jdbc.odbc.JdbcOdbcDriver"; String url = "jdbc:odbc:CarDB"; String usr = ""; String pw = ""; //データベースへの接続 Class.forName(drv); Connection cn = DriverManager.getConnection(url, usr, pw); JavaアプリからはCarDB.mdbにアクセスできたので 引数には問題ないかと思うのですが・・・。

  • yuki22
  • ベストアンサー率28% (8/28)
回答No.1

こんばんは^^ その本持ってないので何ともいえませんがもしかして??って思った事を書かせていただきますね。 アクセスもSQL文ですよね?? Connectionミス。 トムキャットが立ち上げってない。(再起動とか) SQL構文ミス。 importでsql.*;しちゃったほうが・・してたらごめんなさい。 JSPがWeb-infに入ってる。 などだと思うのですが・・、全部やってるよ!って感じでしたらごめんなさい。 もう少し心当たり探ってみますね。

nankurunaisa2006
質問者

お礼

すいません。先日お礼の投稿をさせていただいたつもりでいたのですが、表示されていないようですので再度投稿いたします。 ご指摘いただいた点はいずれも問題ありませんでした。 TOMCATは正常に動いており、SQLも正しいと思います。 JSPの配置も問題ありませんでした。

関連するQ&A