- PR -

insert時のerrorについて

投稿者投稿内容
あざらし
会議室デビュー日: 2004/12/16
投稿数: 5
投稿日時: 2004-12-16 14:30
現在JavaBeansを使ってデータベースから
tableへの入力、削除を行なうページを作成中です。
ですが、以下のプログラムで行なったところ必ずSQLEXCEPTION ERROR
を得てしまいます
環境は
OS:RedHat9
MySQL: 4.1.7-standard
java:j2sdk1.4.2_05
connecter:mysql-connector-java-3.0.16-ga


初心者ですので、簡単な見落しかもしれません。
厳しい御言葉でも結構ですので
アドバイスを頂けないでしょうか

また
useUnicode=true&characterEncoding=EUC-JP
としています




import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import srcBeans.*;
import java.sql.*;

public class Check extends HttpServlet{

/***************** doPost ****************************/
public void doPost(HttpServletRequest req,HttpServletResponse res)
throws IOException,ServletException{

String message= null;


HttpSession thisSession = req.getSession();
UserInformation user = (UserInformation)thisSession.getAttribute("userInf");
if (user == null ){
getServletContext().getRequestDispatcher("/jsp/error.jsp").forward(req, res);
}
res.setContentType("text/html; charset=EUC_JP");

//各パラメーターを取得

String p = req.getParameter("tname");// IDを取得
String tname = new String(p.getBytes("iso-8859-1"),"EUC_JP");

p = req.getParameter("time");
String time= new String(p.getBytes("iso-8859-1"),"EUC_JP");

LoginData data = new LoginData(user.getDate().toDBFormat(),tname,time,user.getUserID());


if(req.getParameter("input") != null) {

try{
message = input(data);
}
catch(SQLException err) {
message = "DB SQL error";
}
catch(ClassNotFoundException err) {
message = "Class not found error";
}

}
else if(req.getParameter("cancel") != null){
// キャンセル処理
try{
message = cancel(data);

}
catch(SQLException err) {
message = "DB SQL error";
}
catch(ClassNotFoundException err) {
message = "class not found error";
}
}

//メッセージ表示画面へ
req.setAttribute("msg",message);
getServletContext().
getRequestDispatcher("/jsp/kekka.jsp").forward(req, res);


}

/***************** 予約処理 *****************************/
private synchronized String input(LoginData data)
throws SQLException,ClassNotFoundException{
String message;
if(data.getTime().length() ==0 ){

message = "時間帯が入力されていません";
}
else{

LoginDB db = new LoginDB();
LoginData dbData =
db.dataRead(data.getDate(),data.getTname());
if(dbData == null){
db.insertData(data);
message = "予約を受け付けました";
}
else{
message = "予約できませんでした";
}
db.closeDB();
}

return message;
}

/***************** キャンセル処理 *****************************/
private synchronized String cancel(LoginData data)
throws SQLException,ClassNotFoundException{
String message;
LoginDB db = new LoginDB();
LoginData dbData =
db.dataRead(data.getDate(),data.getTname());

if(dbData == null){
message = "キャンセルできませんでした";
}
else if(!dbData.getUserID().equals(data.getUserID())){
message = "予約した担当者でないとキャンセルできません";
}
else{
if(db.deleteData(data) > 0){
message = "キャンセルしました";
}
else{
message = "キャンセルできませんでした";
}
}
db.closeDB();

return message;
}
}


Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2004-12-16 14:39
ソースだけじゃなくて、どんなエラーメッセージがでているのかも書いてください。
SQLExceptionが発生した、だけでなく、マシンがどのようなメッセージを出力したかが重要です。

あと、投稿する会議室は、DatabaseかJavaかどちらか一つにしてくださいね。
片方を削除するか、または「これ以降は○○のスレッドでお願いします」と記述してください。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2004-12-16 14:46
ちょっとみて気がつきましたが、これではデバッグなんか、できませんね。
発生するエラーを、片っ端から握りつぶしているようでは。
きっぱりはっきりと、「デバッグなんか、絶対しません」
意思表示しているようなものですね。
コード:

catch(SQLException err) {
message = "DB SQL error";
}


下記のようにして、出力されたテキストを投稿してください。
コード:

catch(SQLException err) {
err.printStackTrace();
message = "DB SQL error";
}



[ メッセージ編集済み 編集者: Edosson 編集日時 2004-12-16 14:47 ]
あざらし
会議室デビュー日: 2004/12/16
投稿数: 5
投稿日時: 2004-12-16 14:48
すみませんでした。どちらに質問するのか適切か判断できませんでしたので、
以後はDatabeseのほうは削除しました
エラーメッセージですがソースで
SQLEXCEPTION ERROR をcatchした場合"DB SQL error"を表示するようにしていたものですから、細かい内容についてはわかりません
表示させようとはいたものの自分の力量が足らずコンパイルエラーばかりだして
半ばあきらめていました
捕捉としてひとつあります。
データのdeleteは可能でした
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2004-12-16 15:30
deleteが可能なのでしたら、
まずは、insertメソッドの、SQL文をチェックしてみてはいかがでしょうか。
あざらし
会議室デビュー日: 2004/12/16
投稿数: 5
投稿日時: 2004-12-16 15:48
エラーメッセージの表示ですがやはり「DB SQL error」とだけ表示されます
またinsertの部分ですが
public void insertData(LoginData data) throws SQLException{
String key = data.getDate()+data.getTname();

String sqlQuery = "INSERT INTO loginData(ID,time,user) VALUES ( '"+key+"','"+data.getTime()+"','"+data.getUserID()+"')";
statement.executeUpdate(sqlQuery);
}

となっています。先入観で無いと思いこんでいるのかもしれませんが
問題ありますか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-12-16 16:16
引用:

あざらしさんの書き込み (2004-12-16 15:48) より:
エラーメッセージの表示ですがやはり「DB SQL error」とだけ表示されます


ソースを変更していないなら当たり前です。まず、他の方の回答をよく読んでスタックトレース
を出力してからにしてください。

引用:

となっています。先入観で無いと思いこんでいるのかもしれませんが
問題ありますか?


テーブル定義もLoginDataというクラスの内容も、ましてやどんなエラーが出ているかもわから
ないのに問題があるかどうかわかるわけありません。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2004-12-16 16:28
引用:

あざらしさんの書き込み (2004-12-16 15:48) より:
エラーメッセージの表示ですがやはり「DB SQL error」とだけ表示されます


「ブラウザに表示されない」という意味であれば、
ブラウザに表示するようにプログラムしていない限り、当たり前です。
サーバーのログか、サーバーを動かしているコンソールをみてください。
あるいは、ブラウザで表示するよう、プログラムするか。
引用:

String sqlQuery = "INSERT INTO loginData(ID,time,user) VALUES ( '"+key+"','"+data.getTime()+"','"+data.getUserID()+"')";
statement.executeUpdate(sqlQuery);
}


「loginData」というのは、テーブル名なんですよね。

[ メッセージ編集済み 編集者: Edosson 編集日時 2004-12-16 16:30 ]

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