首頁 > Java > java教程 > 如何在PreparedStatements中正確使用setDate()以避免`java.lang.IllegalArgumentException`?

如何在PreparedStatements中正確使用setDate()以避免`java.lang.IllegalArgumentException`?

Barbara Streisand
發布: 2024-12-10 18:43:10
原創
749 人瀏覽過

How to Correctly Use setDate() in PreparedStatements to Avoid `java.lang.IllegalArgumentException`?

在PreparedStatement中使用setDate

為了標準化我們的程式碼庫,我們的任務是將硬編碼SQL 變數的所有實例轉換為帶有綁定變數的準備好的語句。但是,我們在 setDate() 方法上遇到了問題。

提供的程式碼片段如下:

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);

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));
登入後複製

執行SQL 查詢時,遇到下列錯誤:

java.lang.IllegalArgumentException
at java.sql.Date.valueOf(Date.java:138)
at com.cmsi.eValuate.TAF.TAFModuleMain.CallTAF(TAFModuleMain.java:1211)
登入後複製

解決方案

setDate() 方法需要一個有效的日期值。在這種情況下,我們將其設為 new java.sql.Date(0000-00-00),這是一個無效日期。

要解決此問題,可以考慮以下解決方案:

使用 java.sql.Date

如果表格列有 DATE type,有以下選項:

  • java.lang.String:使用java.sql.Date.valueOf(java.lang.String) 解析格式為yyyy- [m]m-[d]d的日期字串,例如:

    ps.setDate(2, java.sql.Date.valueOf("2013-09-04"));
    登入後複製
  • java.util.Date:使用new java.sql.Date(endDate.getTime() 轉換java. util.Date物件),例如:

    ps.setDate(2, new java.sql.Date(endDate.getTime()));
    登入後複製
  • 目前:使用new java.sql.Date(System.currentTimeMillis()) 插入目前日期,或java.sql.Date. valueOf Java 8 中的(java.time.LocalDate.now())和

使用java.sql.Timestamp

如果表列有TIMESTAMP 或DATETIME 類型,則以下選項為available:

  • java.lang.String:使用java.sql.Timestamp.valueOf(java.lang.String) 解析yyyy 格式的日期字串-[m]m-[d]d hh:mm:ss[.f…],例如:

    ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00"));
    登入後複製
  • java.util.Date:使用new java.sql.Timestamp(endDate.getTime() 轉換java.util.Date 物件),例如:

    ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));
    登入後複製
  • 目前:使用new java.sql.Timestamp( System.currentTimeMillis()), java.sql.Timestamp.from(java.time.Instant Java 8 中的 .now()) 或 java.sql.Timestamp.valueOf(java.time.LocalDateTime.now())和上面插入當前時間戳記。

以上是如何在PreparedStatements中正確使用setDate()以避免`java.lang.IllegalArgumentException`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板