我们正在使用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"为null,因此我们必须在执行查询之前进行一些检查。但我不确定是否进行了检查。
答案 0 :(得分:0)
错误表示您正在将1111
插入一个列 - 显然 - 不接受4位数字。由于这是Oracle,我要说 - 如果它是VARCHAR2
列 - 它会隐式地将其转换为字符串而INSERT
不会失败。但是,如果您尝试将其插入到DATE
数据类型列中,那么它就不会起作用。
因此,请检查#{defendantInfo.c--}
中哪一个包含1111
以及您存储它的位置。
此外,将#{defendantInfo.c10}
放入c5
是否可以?另外,哪一列是主键列?
答案 1 :(得分:0)
这意味着您尝试插入带有null参数的值。您必须显式设置列的jdbcType,该列可以为null,例如:
{myObject.nullableColumn, jdbcType=VARCHAR}