- ベストアンサー
Servlet と データベースの超初級
今、「やさしいJAVA活用編」という本でデーターベースの基本を勉強しています。 Tomcat3.2.3でローカルサーバーとしてServletでAccessで作った3列2行の表をデータベースとしてアクセスしようとしています。 設定の仕方は本に書いてありましたので、そのとおりにしました。(ODBCドライバーを設定して、Accessの表を関連付けて、、)。 うまく行かなかったので、使用するServletは雑誌に付いていた「Sampleファイル」を使用してみましたが、やはり駄目でした。 エラーとして以下の通りです。 (なにせ間違いが多い本で、ホームページの誤植表を見ても、間違っている場合があったりと少々、困惑している状態です。) Error: 500 Location: /YJKpractice/06/servlet/Sample1 Internal Servlet Error: java.lang.ClassCastException: Sample1 at org.apache.tomcat.core.ServletWrapper.loadServlet(ServletWrapper.java:268) at org.apache.tomcat.core.ServletWrapper.init(ServletWrapper.java:289) at org.apache.tomcat.core.Handler.service(Handler.java:254) at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372) at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:812) at org.apache.tomcat.core.ContextManager.service(ContextManager.java:758) at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213) at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416) at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501) at java.lang.Thread.run(Thread.java:536)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>java.lang.ClassCastException: Sample1 Sample1.classがおかしいようです。 ClassCastExceptionになっているので、 変数の型変換に失敗したのでしょう。
その他の回答 (1)
- sasadora
- ベストアンサー率68% (59/86)
データベース接続がどうとかいう以前に、Servletとして動作していませんよ。 ServletでないSample1というクラスをTomcatから呼ぶから、 上記のようなエラーになるのだと思います。 Sample1というクラスはServletではないのですが、 どうしてTomcatを使っているのでしょうか? 単にSample1を動作させたいのでしたら、Tomcatは無関係で、 java.exeを使って、ApplicationとしてSample1を使えば、 動作すると思います。 Tomcatを使ってサーブレットしてSample1を動作させたいのでしたら、 Sample1はHttpServletを継承して作って、doGetメソッドなどに 処理を記述してください。
補足
ありがとうございます。 なるほど、そうですね。 初めにJSPとサーブレットのレッスンがあって、次にデータベースのレッスンだってので、サーブレットと思い込んでいました。ですが、本当不親切な書籍です。 HPの誤植表をみても最新版では対応しているとなってますが、また同様の場所に誤植があったりと、大変な本を購入してしまいました。 初めてプログラムの勉強をしているのですが、このように誤植が多いものなのでしょうか?プログラムで誤植があると初心者には致命的です。
補足
早速、ありがとうございます。 Sample1のコードは書籍に添付していたCD-ROMについてたものをそのまま使用ものです。書籍のと見比べても間違いはありません。以下がこのプログラムです。 「CarDB」というのがAccsessの表データ(表名:車表)です。どこが悪いのかわかりますでしょうか? お手数ですがお願いします。 import java.sql.*; public class Sample1 { public static void main(String args[]) { try{ //接続の準備 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); //問い合わせの準備 Statement st = cn.createStatement(); String qry = "SELECT * FROM 車表"; //問い合わせ ResultSet rs = st.executeQuery(qry); //データの取得 ResultSetMetaData rm = rs.getMetaData(); int cnum = rm.getColumnCount(); while(rs.next()){ for(int i=1; i<=cnum; i++){ System.out.print(rm.getColumnName(i) + ":" + rs.getObject(i) + " "); } System.out.println(""); } //接続のクローズ rs.close(); st.close(); cn.close(); } catch(Exception e){ e.printStackTrace(); } } }