【问题标题】:Insert query with null values is throwing exception - mybatis插入带有空值的查询抛出异常 - mybatis
【发布时间】:2018-01-23 04:29:56
【问题描述】:

我们正在使用 mybatis 做数据库活动。将数据插入数据库时​​遇到问题。

问题:我在一个表中有 10 个字段,只有一个字段不为非空,它是主键 - 除了所有列都可以为空。 当我尝试仅插入 3 列时,以下查询会出现异常。如果有任何解决方案可以解决以下查询,请告诉我。

查询:

@Insert("insert into defendant (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10)"
        + " values (#{defendantInfo.c1}, #{defendantInfo.c2}, #{defendantInfo.c3}, #{defendantInfo.c4}, #{defendantInfo.c10}, #{defendantInfo.c5}, #{defendantInfo.c6}, #{defendantInfo.c7}, #{defendantInfo.c8}, #{defendantInfo.c9})")
public void insertInToDefendant(DocumentEntryWrapper doc);

例外:java.sql.SQLException: Invalid column type: 1111 at oracle.jdbc.driver.OracleStatement.getInternalType(OracleStatement.java:3916) ~[ojdbc6-11.2.0.1.0.jar:11.2.0.2.0] at oracle.jdbc.driver.OraclePreparedStatement.setNullCritical(OraclePreparedStatement.java:4541) ~[ojdbc6-11.2.0.1.0.jar:11.2.0.2.0] at oracle.jdbc.driver.OraclePreparedStatement.setNull(OraclePreparedStatement.java:4523) ~[ojdbc6-11.2.0.1.0.jar:11.2.0.2.0] at oracle.jdbc.driver.OraclePreparedStatementWrapper.setNull(OraclePreparedStatementWrapper.java:1281) ~[ojdbc6-11.2.0.1.0.jar:11.2.0.2.0] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_121] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_121] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]

注意:我观察到的是#{defendantInfo.c10} - 这里“defendantInfo.c10”为空,所以我们必须在执行查询之前做一些检查。但我不确定是否会进行检查。

【问题讨论】:

    标签: oracle mybatis spring-mybatis


    【解决方案1】:

    错误表明您正在将1111 插入一列 - 显然 - 不接受 4 位数字。由于这是 Oracle,我会说 - 如果它是 VARCHAR2 列 - 它会隐式地将其转换为字符串,INSERT 不会失败。但是,如果您尝试将其插入到 DATE 数据类型列中,那将无法正常工作。

    因此,请检查#{defendantInfo.c--} 中的哪一个包含1111 以及存储它的位置。

    另外,将#{defendantInfo.c10} 放入c5 可以吗?另外,哪一列是主键列?

    【讨论】:

      【解决方案2】:

      这意味着您试图插入一个带有空参数的值。您必须显式设置可能为空的列的 jdbcType,例如:

      {myObject.nullableColumn, jdbcType=VARCHAR}
      

      【讨论】:

        猜你喜欢
        • 2016-05-22
        • 1970-01-01
        • 2021-03-01
        • 1970-01-01
        • 2019-10-15
        • 2015-09-02
        • 2020-03-12
        • 1970-01-01
        • 2019-12-15
        相关资源
        最近更新 更多