为什么ResultSet.deleteRow()不使用Trim()函数来处理查询

时间:2013-12-13 20:08:02

标签: jdbc h2

给出一个简单的查询,例如

“SELECT id,foo FROM Bar”,

在迭代ResultSet时,deleteRow()工作正常,但如果查询是

“SELECT id,TRIM(foo)FROM Bar”

它不再有效:

结果集不可更新。查询必须从唯一键中选择所有列。只能选择一个表。 [90127-173]

这是jdbc限制,还是H2限制/错误?

问候。

1 个答案:

答案 0 :(得分:2)

对于H2数据库,结果集仅在以下情况下可更新:

  • 结果集的所有列都来自同一个表
  • 该表不是系统表,
  • 包含主键的所有列或任何唯一索引,
  • 结果集的所有列都是该表的列。

第二个查询与上一个条件不匹配。这需要更改行和列的值(使用ResultSet.updateX)。我知道你实际上并不想编辑数据;但是H2数据库目前没有区分编辑数据的能力和删除行的能力。