ホームページ > データベース > mysql チュートリアル > PreparedStatements で setDate() を正しく使用して IllegalArgumentException を回避する方法

PreparedStatements で setDate() を正しく使用して IllegalArgumentException を回避する方法

DDD
リリース: 2025-01-18 22:36:11
オリジナル
264 人が閲覧しました

How to Correctly Use setDate() in PreparedStatements to Avoid IllegalArgumentException?

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.Datejava.sql.Timestamp

を使用した正しいアプローチ

データベースのさまざまな列タイプに対して setDate()setTimestamp() を正しく使用する方法は次のとおりです。

DATE 列の場合:

  • 文字列の使用: ps.setDate(2, java.sql.Date.valueOf("2013-09-04")); (「YYYY-MM-DD」形式を確認してください)
  • java.util.Date の使用: 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」形式であることを確認してください)
  • java.util.Date の使用: 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート