プロが教えるわが家の防犯対策術!

今、「やさしい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)

A 回答 (2件)

>java.lang.ClassCastException: Sample1



Sample1.classがおかしいようです。
ClassCastExceptionになっているので、
変数の型変換に失敗したのでしょう。

この回答への補足

早速、ありがとうございます。
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();
}
}
}

補足日時:2002/11/28 17:45
    • good
    • 0

データベース接続がどうとかいう以前に、Servletとして動作していませんよ。


ServletでないSample1というクラスをTomcatから呼ぶから、
上記のようなエラーになるのだと思います。

Sample1というクラスはServletではないのですが、
どうしてTomcatを使っているのでしょうか?

単にSample1を動作させたいのでしたら、Tomcatは無関係で、
java.exeを使って、ApplicationとしてSample1を使えば、
動作すると思います。

Tomcatを使ってサーブレットしてSample1を動作させたいのでしたら、
Sample1はHttpServletを継承して作って、doGetメソッドなどに
処理を記述してください。

この回答への補足

ありがとうございます。
なるほど、そうですね。
初めにJSPとサーブレットのレッスンがあって、次にデータベースのレッスンだってので、サーブレットと思い込んでいました。ですが、本当不親切な書籍です。
HPの誤植表をみても最新版では対応しているとなってますが、また同様の場所に誤植があったりと、大変な本を購入してしまいました。
初めてプログラムの勉強をしているのですが、このように誤植が多いものなのでしょうか?プログラムで誤植があると初心者には致命的です。

補足日時:2002/11/28 19:52
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!