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()
:
對於日期欄位:
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中文網其他相關文章!