たなかのJava日記

どんなことをやったか(学んだか)、どこで詰まったか(わからなかったか)、どこで工夫したかの記録です。

【DBエラー】更新機能を使用するとエラーが発生した件...

【困りごと】

更新ボタンを押下後、エラーが発生してしまいました。

 

【エラー内容】

更新ボタンを押すとJavaScriptが動き、画面遷移せず更新ダイアログが開きます。

そこで変更箇所を再入力、更新ボタンを押すとエラーが発生してしまいます。

変更箇所もパターンを変えたり、変更せずに変更ボタンを押してもエラーが発生します。

その他、機能の削除や登録は問題なく動作しています。

エラーの画面は、Whitelabel Error Page だった記憶があります。

IDEでの実行結果では、SQL構文がなんたらと書いてあったのを最後の最後に見つけました。

⇒大反省です。

 

【エラー時の詳細/原因の仮説】

更新時に関わる部分だということは想像に難くありません。

確認が必要な箇所は以下だと予想し検証しました。

 

■確認箇所

更新時の一連の流れ

タイピングミス

 

【検証結果】

更新時の流れに問題はありませんでした。

タイピングミスはあったものの修正しても上手くいきませんでした。

 

【再度仮説を立てる】

前回のエラー時にSQL付近だったので、SQL文の確認を行いました。

 

【再検証の結果】

更新時のSQL文が間違っていたためでした。

以下コードのdone = ?の末尾に「,」を入れていました。

 

 

 

public int update(HomeController.TaskItem taskItem) {
int number = jdbcTemplate.update(
"UPDATE tasklist SET task = ?, deadline = ?, done = ? WHERE id = ?",
taskItem.task(),
taskItem.deadline(),
taskItem.done(),
taskItem.id());
return number;
}


惰性で「?」の後は、一区切りだと思い込んでいました。

プログラムのような扱いをしていたことと、

SQL文を横文字で展開していたため区切りがわかりにくかった為です。

 

以下のようにSQLのツールで書くようにして、確認してからの方が良いかもしれません。

UPDATE tasklist

SET task = ?, deadline = ?, done = ?

WHERE id = ?;

 

そんなことより、

一番の問題は実行結果のログを焦って読んでいなかったことです。

解決する寸前に、SQL構文がどうたらと書いてありました。

エラーメッセージが大量に表示されても、落ち着ついて読んでみることを意識します。