- PR -

JSPでupdate文がうまくいかない

1
投稿者投稿内容
MrKK
会議室デビュー日: 2004/08/07
投稿数: 4
投稿日時: 2004-08-07 08:49
こんにちわ。うまくいかないので教えてください。
Apache1.3.31+Tomcat4.1.30+MySQL4.0.20d、mysql-connector-java-3.0.14.jar
の構成で、dbデータのカウンタみたいなものをJSPで用意しています。

一度 select で取得して カウンタを更新して updateという作業を行うのですが
環境をLinux→Windowsに置き換えたとたん、動いていたJSPの なぜか update文の
部分が通らず困っております。

ResultSet rs = stmt.executeQuery(sqlstr);
while(rs.next()){
stsCounter=rs.getInt("sts");
}
stsCounter++;
sqlstr="update dat set sts='"+stsCounter+"' where id='"+logID+"'";
rs = stmt.executeQuery(sqlstr);

という具合です。ここで出来上がるsqlstr文をコマンドプロンプトでmysqlに
直接渡すと問題なく通りますし、<%=sqlstr%>で内容をページ表示させても
変数の値は問題なく表示されることも判っています。

tomcat上のエラー内容は、HTTP Status 500 -

type Exception report

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException:

Can not issue data manipulation statements with executeQuery()
at org.apache.jasper.servlet.JspServletWrapper.service
(JspServletWrapper.java:254)
:
:
:

という具合です。

ぜひとも、お助けください
yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2004-08-07 10:41
同じstmtに対して異なる内容のexecuteQueryを行っているからではないでしょうか?

一度stmtを閉じて、新たなStatementを作成して、そこで2番目のSQLを発行すると
どうでしょうか?
(stmtだけでなく rs も閉じた方が良さそうです。)
MrKK
会議室デビュー日: 2004/08/07
投稿数: 4
投稿日時: 2004-08-07 11:07
お答えありがとうございます。
結果、conも閉じてみましたが、同じ結果でダメでした。

sqlの内容をupdateからselectにするとエラー無く通ります。
(もちろん、dbの更新はできませんが)

このことから、MySQL側の問題ではないかと、今connector.jarファイルを
取り替えたりMySQLを入れなおしたりしたのですが、変わりません。

jdbcは、localhostにuseUnicode=true&characterEncoding=SJIS&maxRows=0
で指定しているのですが、このあたりがいけないのでしょうか?

未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2004-08-07 11:17
executeQuery → executeUpdate では??
MrKK
会議室デビュー日: 2004/08/07
投稿数: 4
投稿日時: 2004-08-07 11:45
お答えありがとうございます。

rs = stmt.executeUpdate (sqlstr);

に変更したところ、

org.apache.jasper.JasperException: JSPのクラスをコンパイルできません

JSPファイル: /download.jsp の中の行: 10でエラーが発生しました

生成されたサーブレットのエラーです:
[javac] Compiling 1 source file

D:\tomcat4\work\Standalone\localhost\_\download_jsp.java:111: 互換性のない型
出現: int
要求: java.sql.ResultSet
rs = stmt.executeUpdate (sqlstr);
^

となってしまいました。う〜ん。。。
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2004-08-07 11:50
お疲れ様です。
Updateはクエリー結果を返さないので(正確な解釈ではありませんが・・・)

sqlstr="update dat set sts='"+stsCounter+"' where id='"+logID+"'";
stmt.executeUpdate(sqlstr);

でよろしいかと思われます。
MrKK
会議室デビュー日: 2004/08/07
投稿数: 4
投稿日時: 2004-08-07 19:26
なるほど、気がつきませんでした。

で、その通りやりましたら、無事エラーがでないで使えるようになりました。
ありがとうございます。
1週間ぐらい悩んでいて、悩んでいました。

ここに書き込んで良かったです。
本当にありがとうございます。
1

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