如何将日期对象作为第一个也是唯一的输入参数传递给 PL-SQL
Posted
技术标签:
【中文标题】如何将日期对象作为第一个也是唯一的输入参数传递给 PL-SQL【英文标题】:How to pass date object to PL-SQL as the first and only input parameter 【发布时间】:2020-08-02 08:36:11 【问题描述】:首先,我将从数据库中获取一个日期值作为输入变量。日期格式将采用 (2020-08-31) 格式。
我需要将这个日期转换成如下格式的 PL-SQL 块。
to_date('31082020','ddmmyyyy')
为了获得上述格式,我使用 java 进行了如下转换。
// Converting the date format for the required type for PL-SQL block
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("ddMMyyyy");
String modifiedDate = simpleDateFormat.format(processingDate);
String modifiedDateParameter = "to_date(\'"+modifiedDate+"\','ddmmyyyy')";
现在我将把上面的 modifiedDateParameter 作为输入参数传递给我的 PL-SQL 块。代码如下。这里的 SQL 是我将要调用的过程。
callableStatement = conn.prepareCall(SQL); callableStatement.setDate(1,java.sql.Date.valueOf(billEndDate)); callableStatement.executeUpdate();
但是我得到了以下异常。
线程“主”java.lang.IllegalArgumentException 中的异常 在 java.sql/java.sql.Date.valueOf(Date.java:141)
请问我需要如何修改才能解决此问题?
【问题讨论】:
我建议你不要使用SimpleDateFormat
和Date
。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDate
。
【参考方案1】:
看看java.sql.Date.valueOf的javadoc: https://docs.oracle.com/javase/7/docs/api/java/sql/Date.html#valueOf(java.lang.String)
将 JDBC 日期转义格式的字符串转换为日期值。 s - 一个字符串对象,表示格式为“yyyy-[m]m-[d]d”的日期。 mm 和 dd 的前导零也可以省略。
所以这个调用有效: java.sql.Date.valueOf("2020-2-2");
这会引发您提到的异常: java.sql.Date.valueOf("20200909");
【讨论】:
以上是关于如何将日期对象作为第一个也是唯一的输入参数传递给 PL-SQL的主要内容,如果未能解决你的问题,请参考以下文章