不是有效的月份,而是数字数据类型 Java-Oracle

Not a valid month but Number datatype Java-Oracle

我尝试通过Java从数据库Oracle中收集一些信息。

我执行的字符串是:

String sql="SELECT * FROM SAP_PHOTOVOLTAIC WHERE REF_MONTH=? ";

try (PreparedStatement pst=connection.prepareStatement(sql)
{
pst.setInt(1,Integer.parseInt(stringDateThatGetsFromUser))
 try(ResultSet rs=pst.executeQuery()){ //throws exception
.......
}}

抛出的异常是

java.sql.SQLDataException: ORA-01843: not a valid month

Caused by: Error : 1843, Position : 1440, Sql = SELECT * FROM SAP_PHOTOVOLTAIC WHERE REF_MONTH=:1 , OriginalSql = SELECT * FROM SAP_PHOTOVOLTAIC WHERE REF_MONTH=?, Error Msg = ORA-01843: not a valid month

我设置的参考月份示例是“202101”。在 Oracle 中,它是 NUMBER(10) 数据类型而不是 DATE。

我也尝试按照其他 post 在 'not valid month' 上的建议执行。

      connection.createStatement().execute("alter session set NLS_DATE_FORMAT='YYYYMM'");

异常改为:

Caused by: Error : 1858, Position : 1440, Sql = SELECT * FROM SAP_PHOTOVOLTAIC WHERE REF_MONTH=:1 , OriginalSql = SELECT * FROM SAP_PHOTOVOLTAIC WHERE REF_MONTH=?, Error Msg = ORA-01858: a non-numeric character was found where a numeric was expected

我也尝试过 TO_NUMBER(?,'999999') 和 setString。与之前的错误相同。

当我通过 Oracle 执行以下命令时,它运行正常。

SELECT * FROM SAP_PHOTOVOLTAIC WHERE REF_MONTH='202101';

***更新

我不知道为什么,但这通过 Java 起作用,但结果为零。

 String sql="SELECT * FROM SAP_PHOTOVOLTAIC WHERE REF_MONTH='20210101'";

案件结案。我们发现了错误。对于两列中的某些值,数据库中 table 的 sql 代码未正确修改。