为了提高代码标准化,您需要将硬编码的SQL变量替换为预处理语句并进行绑定。但是,您在使用setDate()方法时遇到问题。
<code class="language-java">String vDateMDYSQL = vDateMDY; java.sql.Date date = new java.sql.Date(0000-00-00); ... prs.setDate(2, date.valueOf(vDateMDYSQL));</code>
执行SQL语句时,出现以下错误:
<code>java.lang.IllegalArgumentException at java.sql.Date.valueOf(Date.java:138)</code>
问题在于使用0000-00-00作为默认值不正确地初始化了date变量。为了解决这个问题,在处理日期时,请考虑以下替代方案:
对于具有DATE列类型的表:
使用字符串:
<code class="language-java"> ps.setDate(2, java.sql.Date.valueOf("2013-09-04"));</code>
使用java.util.Date:
<code class="language-java"> ps.setDate(2, new java.sql.Date(endDate.getTime()));</code>
获取当前日期:
<code class="language-java"> ps.setDate(2, new java.sql.Date(System.currentTimeMillis()));</code>
对于具有TIMESTAMP或DATETIME列类型的表:
使用字符串:
<code class="language-java"> ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00"));</code>
使用java.util.Date:
<code class="language-java"> ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));</code>
获取当前时间戳:
<code class="language-java"> ps.setTimestamp(2, new java.sql.Timestamp(System.currentTimeMillis()));</code>
使用以上任何一种方法都可以正确设置预处理语句中的日期,从而避免您遇到的错误。
以上是如何在JavaPreparedStatements中正确使用setDate()以避免`IllegalArgumentException`?的详细内容。更多信息请关注PHP中文网其他相关文章!