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中文网其他相关文章!