- ベストアンサー
サーブレットでデータベース操作。
サーブレットを使ってMySQL内のテーブルにレコードを追加、変更、削除できるようなプログラムを作っています。流れとしましては『HTML画面→サーブレット起動→レコード追加、変更、削除』といった具合です。追加、変更ができてなぜか削除だけできません。SQL文を書き換えるだけのはずなのですが・・。どなたか教えて下さい。windows2000Professional, j2sdk1.4.0_01, Tomcat3.3.1,MySQL3.23.47 略 . . Connection con = null; Statement stmt = null; try { con = DriverManager.getConnection( "jdbc:mysql://localhost/db_ichat", "root", "pen3"); stmt = con.createStatement(); String seqno = request.getParameter("seqno"); String name = request.getParameter("name"); String namejp = new String(name.getBytes("8859_1"), "JISAutoDetect"); String psw = request.getParameter("psw"); String pswjp = new String(psw.getBytes("8859_1"), "JISAutoDetect"); String email = request.getParameter("email"); StringBuffer buf = new StringBuffer(); buf.append("delete from t_id "); buf.append("where seqno = "); buf.append(seqno); stmt.executeUpdate(buf.toString()); try { stmt.close(); } catch (Exception e) {} try { con.close(); } catch (Exception e) {} . . 略。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Exceptionを見る限りでは、 s_delete.java:55 s_delete.javaのソースの、55行目に原因があるといっています。 55行目の情報設定の値がNULLになっているとかはありませんか? 55行目の前後をご確認ください。
その他の回答 (2)
> String name = request.getParameter("name"); : > String psw = request.getParameter("psw"); これのどちらかが、HttpServletRequestからnullで 取得されたりしてませんか?
お礼
おいそがしいのに時間を割いて答えてくださいましてありがとうございました。
- nori1976
- ベストアンサー率60% (3/5)
できたSQL文(stmt.executeUpdate(buf.toString());直前のもの)を、ログに出力し、確認してみてください。 それと、ExceptionとSQLExceptionを拾って、getMessage()でメッセージを取得してみてください。 原因がわかると思います。 Connection con = null; Statement stmt = null; try { con = DriverManager.getConnection( "jdbc:mysql://localhost/db_ichat", "root", "pen3"); stmt = con.createStatement(); String seqno = request.getParameter("seqno"); String name = request.getParameter("name"); String namejp = new String(name.getBytes("8859_1"), "JISAutoDetect"); String psw = request.getParameter("psw"); String pswjp = new String(psw.getBytes("8859_1"), "JISAutoDetect"); String email = request.getParameter("email"); StringBuffer buf = new StringBuffer(); buf.append("delete from t_id "); buf.append("where seqno = "); buf.append(seqno); try{ stmt.executeUpdate(buf.toString()); }catch(SQLException e){ // ログがあるならログを入れてください、ないなら,stdout e.printStackTrace(); }catch(Exception e){ // ログがあるならログを入れてください、ないなら,stdout e.printStackTrace(); } try { stmt.close(); } catch (Exception e) {} try { con.close(); } catch (Exception e) {} #上記方法で出力したならば、tomcatのlogs配下のログにはかれているはずです。
補足
tomcat画面では下記のログが出まして、logファイルの中には『2003-01-25 18:28:04 - /netjv: s_delete: init』と書かれたテキストがありました。 もう少し簡単に説明お願いします。 java.lang.NullPointerException at s_delete.processRequest(s_delete.java:55) at s_delete.doGet(s_delete.java:98) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.tomcat.facade.ServletHandler.doService(ServletHandler.java :574) at org.apache.tomcat.core.Handler.invoke(Handler.java:322) at org.apache.tomcat.core.Handler.service(Handler.java:235) at org.apache.tomcat.facade.ServletHandler.service(ServletHandler.java:4 85) at org.apache.tomcat.core.ContextManager.internalService(ContextManager. java:917) at org.apache.tomcat.core.ContextManager.service(ContextManager.java:833 ) at org.apache.tomcat.modules.server.Http10Interceptor.processConnection( Http10Interceptor.java:176) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java :494) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:516) at java.lang.Thread.run(Thread.java:536)
お礼
できました!!なんてことはない理由でした。 取得しなくても良いものを書いていたからだったと思います。 //String name = request.getParameter("name"); //String namejp = new String(name.getBytes("8859_1"), // "JISAutoDetect"); //String psw = request.getParameter("psw"); //String pswjp = new String(psw.getBytes("8859_1"), // "JISAutoDetect"); //String email = request.getParameter("email"); これらの部分を上記のようにコメントにして String seqno = request.getParameter("seqno");だけを取得した結果、 うまくいきました。55行目付近を徹底して考えていたらわかりました。 ちょっと原因に拍子抜けしましたが、できてよかったです。ありがとうございました。