PreparedStatement の setDate() メソッド: エラーを防ぐためのベスト プラクティス
準備されたステートメントに移行するとコードの一貫性が向上しますが、setDate()
を使用すると IllegalArgumentException
エラーが発生する場合があります。 これらの問題を回避する方法を検討してみましょう。
次の問題のあるコード スニペットを考えてみましょう:
<code class="language-java">DateFormat dateFormatYMD = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); DateFormat dateFormatMDY = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); Date now = new Date(); String vDateYMD = dateFormatYMD.format(now); String vDateMDY = dateFormatMDY.format(now); String vDateMDYSQL = vDateMDY ; java.sql.Date date = new java.sql.Date(0000-00-00); //Incorrect date initialization requestSQL = "INSERT INTO CREDIT_REQ_TITLE_ORDER (REQUEST_ID," + " ORDER_DT, FOLLOWUP_DT) " + "values(?,?,?,)"; prs = conn.prepareStatement(requestSQL); prs.setInt(1,new Integer(requestID)); prs.setDate(2,date.valueOf(vDateMDYSQL)); prs.setDate(3,date.valueOf(sqlFollowupDT));</code>
IllegalArgumentException
は、不適切な日付処理が原因である可能性があります。 一貫性のない形式の文字列や不正な日付の初期化を伴う date.valueOf()
の使用は避けてください。
java.sql.Date
と java.sql.Timestamp
データベースのさまざまな列タイプに対して setDate()
と setTimestamp()
を正しく使用する方法は次のとおりです。
DATE 列の場合:
ps.setDate(2, java.sql.Date.valueOf("2013-09-04"));
(「YYYY-MM-DD」形式を確認してください)ps.setDate(2, new java.sql.Date(endDate.getTime()));
ps.setDate(2, new java.sql.Date(System.currentTimeMillis()));
TIMESTAMP または DATETIME 列の場合:
ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00"));
(「YYYY-MM-DD HH:mm:ss」形式であることを確認してください)ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));
ps.setTimestamp(2, new java.sql.Timestamp(System.currentTimeMillis()));
これらのベスト プラクティスに従い、適切なデータ型と形式を使用することで、プリペアド ステートメント内で setDate()
と setTimestamp()
を確実に使用でき、IllegalArgumentException
エラーを防ぎ、データの整合性を確保できます。 日付/時刻の文字列形式を常にデータベースの期待値と一致させることを忘れないでください。
以上がPreparedStatements で setDate() を正しく使用して IllegalArgumentException を回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。