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

本文分析了2025年的前四个JavaScript框架(React,Angular,Vue,Susve),比较了它们的性能,可伸缩性和未来前景。 尽管由于强大的社区和生态系统,所有这些都保持占主导地位,但它们的相对人口

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

本文介绍了SnakeyAml中的CVE-2022-1471漏洞,这是一个允许远程代码执行的关键缺陷。 它详细介绍了如何升级春季启动应用程序到Snakeyaml 1.33或更高版本的降低风险,强调了依赖性更新

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

Node.js 20通过V8发动机改进可显着提高性能,特别是更快的垃圾收集和I/O。 新功能包括更好的WebSembly支持和精制的调试工具,提高开发人员的生产率和应用速度。

本文使用lambda表达式,流API,方法参考和可选探索将功能编程集成到Java中。 它突出显示了通过简洁性和不变性改善代码可读性和可维护性等好处

本文探讨了在黄瓜步骤之间共享数据的方法,比较方案上下文,全局变量,参数传递和数据结构。 它强调可维护性的最佳实践,包括简洁的上下文使用,描述性


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

Dreamweaver Mac版
视觉化网页开发工具

记事本++7.3.1
好用且免费的代码编辑器

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器