如何将日期对象作为第一个也是唯一的输入参数传递给 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)

请问我需要如何修改才能解决此问题?

【问题讨论】:

我建议你不要使用SimpleDateFormatDate。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自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的主要内容,如果未能解决你的问题,请参考以下文章

如何将子类作为期望基类的函数的参数传递,然后将该对象传递给指向这些抽象类对象的指针向量?

如何将关键字对作为参数传递给函数中的模块?

如何将 unique_ptr 对象作为参数传递给作为库的类

如何将参数传递给我的处理程序

如何将对象属性作为参数传递给 Razor 组件

如何将向量作为参数传递给另一个向量?