【发布时间】:2010-09-25 09:24:45
【问题描述】:
问题简述:
当尝试使用准备好的语句和 groovy.sql.Sql 插入包含几个空列的行时会发生这种情况:
groovy:000> val
===> [123123123, 2, null, 0, 0, , null, , 1213020112511801, 1283425009158952, 1, 2, null, 0, 0, , null, , 1213020112511801, 1283425009158952]
groovy:000> destSql.execute "insert into my_table values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", val
ERROR java.sql.SQLException: Type is not supported.
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException (Unknown Source)
at org.apache.derby.client.am.SqlException.getSQLException (Unknown Source)
at org.apache.derby.client.am.PreparedStatement.setObject (Unknown Source)
at groovysh_evaluate.run (groovysh_evaluate:3)
...
groovy:000>
destSql.dataSet("my_table").add valueMap 得到了类似的结果。
这是尝试插入与 GString 相同的行时发生的情况:
groovy:000> destSql.execute "insert into my_table values (${val[0]}, ${val[1]}, ${val[2]}, ${val[3]}, ${val[4]}, ${val[5]}, ${val[6]}, ${val[7]}, ${val[8]}, ${val[9]})"
===> false
groovy:000>
现在,我了解到使用准备好的语句插入空值存在问题(如文档所述,例如 here 和 here)。
我想了解的是:
1) 我很难相信在准备好的语句中插入空值是不可能,那么为什么有时会导致问题呢?不完善的 JDBC 驱动程序、数据库引擎?
2) 为什么使用 GString 的示例有效?照着同样的逻辑,空列的信息不还是要输入的吗?
【问题讨论】: