- - PR -
データベースにアクセスできない
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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; } } 初歩的な問題かもしれませんが、 ご指導、よろしくお願いいたします。 |
|
投稿日時: 2005-02-18 10:53
申し訳ありません。
2回送信してしまいました・・・ |
|
投稿日時: 2005-02-18 13:13
どのクラスが見つからない、と言われているのでしょうか。おそらくドライバクラスでしょうがが、
まずスタックトレースを全部貼り付けたほうがいいと思います。 |
|
投稿日時: 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) |
|
投稿日時: 2005-02-18 13:24
それから、JDBCドライバーの
classpathは C:\mysql-connector-java-3.1.6\mysql-connector-java-3.1.6-bin.jar と、設定しました。 ほかに何か設定しなければいけないことなどありますでしょうか?? よろしくお願いします。 |
|
投稿日時: 2005-02-18 13:31
java.sql.SavePointはJ2SE1.4から導入されたインタフェースですね。
TomcatがJ2SE1.3で動いているようですので、使っているJDKを1.4にすればいいのでは ないですか? |
|
投稿日時: 2005-02-18 13:39
ukさん、ご返答ありがとうございます。
java.sql.Savepointを調べたところ、 導入されたバージョンは確かに1.4でした。 しかし、java.sql.Savepointというのはどこにも使っていないと思うのですが・・・ どうしてこのようなエラーが発生したか、教えていただけますでしょうか? お願いいたします。 |
|
投稿日時: 2005-02-18 14:04
スタックトレースを見る限りでは、MySQLのドライバの中で使っているようです。
|