- PR -

データベースにアクセスできない

投稿者投稿内容
JJ
会議室デビュー日: 2005/02/18
投稿数: 15
お住まい・勤務地: 神奈川
投稿日時: 2005-02-18 10:51
こんにちは。
JSP、サーブレットを使ってDBにアクセスしたいのですが、うまくいきません。
開発環境は
OS:windows2000
webサーバ:TOMCAT
DBサーバ:MySQL
です。
コンパイルはとおるのですが、
画面上で動かすとエラーが発生します。
エラーの内容は
java.lang.NoClassDefFoundError
です。
CLASSPATHの通し方が間違っているのでしょうか??
ソースコードは以下のとおりです。

package post;
import java.sql.*;
import java.util.Map;
import java.util.HashMap;

public class PostCodeSQLSearchLogic {

private static final String ADDRESS_KEY = "address";
private static final String CODE_KEY = "code";
private static final String DRIVER_NAME = "org.gjt.mm.mysql.Driver";
private static final String DSN_NAME = "jdbc:MySQL://localhost:3306/post_data?user=root&password=serf";
private static final String SELECT_SQL = "SELECT newpost,concat(pref,area,addr)address FROM postcode";
private String searchaddress = null;
private String searchCode = null;
private Map paramMap = new HashMap();

//コンストラクタ
public PostCodeSQLSearchLogic(Map paramMap) {
this.paramMap = paramMap;
this.searchaddress = (String)paramMap.get(ADDRESS_KEY);
this.searchCode = (String)paramMap.get(CODE_KEY);
}

//コンストラクタ
public PostCodeSQLSearchLogic(String searchaddress,
String searchCode) {
this.searchaddress = searchaddress;
this.searchCode = searchCode;
}

/**
* DBに接続し、検索した結果を返します。
*
* @return Map 検索結果
*/
public Map getResultData() {
//検索データを格納するMapを用意。
Map dbDataMap = new HashMap();
try {
//ドライバクラスをロード
Class.forName(DRIVER_NAME);
//データベースへの接続(☆この処理でエラーになります。)
Connection con = DriverManager.getConnection(DSN_NAME);
System.out.println("OK2");
//ステートメントオブジェクトを生成
Statement stmt = con.createStatement();
String sql = selectSql(stmt);
// クエリーを実行して結果セットを取得
ResultSet rs = stmt.executeQuery(sql);
//情報取得
while(rs.next()) {
dbDataMap.put(CODE_KEY,rs.getString("newpost"));
dbDataMap.put(ADDRESS_KEY,rs.getString("address"));
}
// データベースから切断
stmt.close();
con.close();
} catch (Exception e){
e.printStackTrace();
}
return dbDataMap;
}

/**
* 検索条件に合わせたselect文を発行します。
*
* @return String sql文
*/
public String selectSql(Statement stmt) {
String sql = "";
//住所が入力されていた場合
if(searchaddress != null && !searchaddress.equals("")) {
//検索処理
sql = SELECT_SQL + "WHERE concat(pref,area,addr) LIKE '%" + searchaddress + "%'";
}
//郵便番号が入力されていた場合
if(searchCode != null && !searchCode.equals("")) {
//検索処理
sql = SELECT_SQL + "WHERE newpost Like '" + searchCode + "%'";
}
return sql;
}
}
初歩的な問題かもしれませんが、
ご指導、よろしくお願いいたします。
JJ
会議室デビュー日: 2005/02/18
投稿数: 15
お住まい・勤務地: 神奈川
投稿日時: 2005-02-18 10:53
申し訳ありません。
2回送信してしまいました・・・
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-02-18 13:13
どのクラスが見つからない、と言われているのでしょうか。おそらくドライバクラスでしょうがが、
まずスタックトレースを全部貼り付けたほうがいいと思います。
JJ
会議室デビュー日: 2005/02/18
投稿数: 15
お住まい・勤務地: 神奈川
投稿日時: 2005-02-18 13:19
スタックトレースです。
これを見ても良くわかりませんでした・・・
ご指導、よろしくお願いいたします。

java.lang.NoClassDefFoundError: java/sql/Savepoint
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:268)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:194)
at post.PostCodeSQLSearchLogic.getResultData(PostCodeSQLSearchLogic.java:51)
at servlet.PostSearchServlet.processRequest(PostSearchServlet.java:63)
at servlet.PostSearchServlet.doGet(PostSearchServlet.java:27)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
JJ
会議室デビュー日: 2005/02/18
投稿数: 15
お住まい・勤務地: 神奈川
投稿日時: 2005-02-18 13:24
それから、JDBCドライバーの
classpathは
C:\mysql-connector-java-3.1.6\mysql-connector-java-3.1.6-bin.jar
と、設定しました。
ほかに何か設定しなければいけないことなどありますでしょうか??
よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-02-18 13:31
java.sql.SavePointはJ2SE1.4から導入されたインタフェースですね。
TomcatがJ2SE1.3で動いているようですので、使っているJDKを1.4にすればいいのでは
ないですか?
JJ
会議室デビュー日: 2005/02/18
投稿数: 15
お住まい・勤務地: 神奈川
投稿日時: 2005-02-18 13:39
ukさん、ご返答ありがとうございます。
java.sql.Savepointを調べたところ、
導入されたバージョンは確かに1.4でした。
しかし、java.sql.Savepointというのはどこにも使っていないと思うのですが・・・
どうしてこのようなエラーが発生したか、教えていただけますでしょうか?
お願いいたします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-02-18 14:04
スタックトレースを見る限りでは、MySQLのドライバの中で使っているようです。

スキルアップ/キャリアアップ(JOB@IT)