- - PR -
時刻計算について
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-05-17 16:41
ここが間違っています。Object 同士の比較は equals を使用します。 # 追記 あれれ?
は、両方とも nullでないかぎり常に偽だから INSERT 文が呼ばれるはずですねぇ。 間違いは間違いでも関係ない? [ メッセージ編集済み 編集者: 顔爺 編集日時 2004-05-17 16:44 ] # さらに追記
rs.next() が抜けています。 [ メッセージ編集済み 編集者: 顔爺 編集日時 2004-05-17 17:06 ] | ||||||||||||
|
投稿日時: 2004-05-17 17:02
間違っている個所は顔爺さんが指摘してくださったので、その他について。
何も処理されないということですので、おそらく、どこかで例外が発生していて catchに飛んでいるのだと思います。 でも、今はcatchでは何も処理していませんよね? catchでExceptionクラスの内容を表示させれば、ちょっとはデバッグが早く 進むかと思います。 タイムカードの押し忘れ対策として、別ページで修正できるようにするとの ことですが、そもそもユーザが退勤時刻を記録するつもりなのに出勤時刻の 記録になってしまったりするのは、使う側としてはあまりうれしくないのでは ないでしょうか。 システムで判別できないならともかく、仕掛け上判別はできる筈ですから、 ちょっと頑張ってみるのもよいのでは、と思います。 それと、これは危険性は低い事象なのですが、複数のページから同じIDで 接続している場合に、データの不整合を起こす危険がありますね。 退勤時刻を記録しようとしてブラウザA(の処理をしているサーバプロセス)が 最大のIDを取得した後で、ブラウザB(の処理をしているサーバプロセス)が先に UPDATEしてしまい、ブラウザAが新規にデータを挿入する(出勤を記録する)べき だと判定してしまうとか。 厳密にやるとすれば、トランザクションの管理が必要になってきます。 まあ、社内の出退勤管理システムということですので、同じIDで複数の 人間がアクセスする可能性は低いと考えられますし、気にしなくても よいかもしれません。 | ||||||||||||
|
投稿日時: 2004-05-17 17:36
返信ありがとうございます。
アドバイスして頂いた通り、 if (shussha.equals(taisha)) と変更し、また以下の部分を追加してみました。 catch (Exception e) { out.println("データ追加エラー"+e); try { // ロールバックします conn.rollback(); } catch (SQLException ex) { e.printStackTrace(); } } すると、java.sql.SQLException:Column'no' not found というエラーが出ました。。。。 最新データを取得する部分でどこか間違っているのでしょうか?? select no,name,uid,hiduke,thiduke,shussha,taisha from kinmu where no=(select max(no) from kinmu) という方法で最新のデータを取得しようとも考え、コマンドプロンプト上で打ってみたのですがうまく選択されませんでした。バージョンはmysql-3.23.55です。 | ||||||||||||
|
投稿日時: 2004-05-17 19:50
このselect文が上手くいかないのは、mysql3.23で 副問い合わせ文がサポートされていないのが原因だと思います。 あと、今までの投稿にはかかれてないようですが、 noはautoincrement型になっているんですよね? | ||||||||||||
|
投稿日時: 2004-05-17 20:18
teaさんのおっしゃる通り、noはautoincrement型です。
それが原因でしょうか?? ご教授の程よろしくお願いしますm(u_u)m | ||||||||||||
|
投稿日時: 2004-05-17 21:19
これよりも、 e.printStackTrace(); の方がよいでしょう。例外の発生箇所も含めてより詳細な情報が出力されます。
ではなくて、update文では? まず例外の発生箇所を特定するのが先ですが、SQLExceptionが 出る場合は、実行しているSQL文をDB付属ユーティリティなどで実行できるかどうか確認して みましょう。 | ||||||||||||
|
投稿日時: 2004-05-18 10:03
すいません、原因とは直接は関係ないんです。 情報を正確にしてもらった方が解決しやすいと思っただけで(^^; ukさんが既に指摘されていますが、何行目でSQLExceptionが起きていて 今の状態になっているのかをはっきりさせる必要があると思います。 対処はそれからのほうが。 | ||||||||||||
|
投稿日時: 2004-05-18 11:02
というアドバイスを頂いたので早速 catch (Exception e) { e.printStackTrace(); try { // ロールバックします conn.rollback(); } catch (SQLException ex) { e.printStackTrace(); } } に書き換えてみました。しかし、何のエラーも表示されなくなってしまいました(;へ:) 変更の仕方がおかしいのでしょうか??調べてみたのですが分かりませんでした。。 また、 sql = "UPDATE kinmu SET " + " taisha = '" + request.getParameter("taisha") + "'" + " thiduke = '" + hiduke +"'" + " WHERE no = " + rs.getInt("no"); の一部に変な箇所があったので + " taisha = '" + request.getParameter("taisha") + "'," と直しました。 | ||||||||||||
