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

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

Barbara Streisand
发布: 2024-12-10 18:43:10
原创
748 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板