如何使用准备好的语句更新 ARRAY 的单个元素?

How do I update a single element of an ARRAY with a prepared statement?

我们有一个带有 ARRAY 列的 HSQLDB table。我们如何用低成本的预处理语句更新单个元素?

到目前为止,我们已经尝试了:

PreparedStatement pstmt = con.prepareStatement("UPDATE mytbl SET col[?] = ? WHERE id = ?");
...
pstmt.setInt(1, idx);
pstmt.setInt(2, val);
pstmt.setInt(3, id);
...

但这不起作用。

数据库引擎需要一个 CAST 作为提示来确定其中一个参数的类型。在案例中使用数组元素的类型。下面的示例显示了当数组包含 INTEGER 或 TIMESTAMP 值时所需的转换:

PreparedStatement pstmt = con.prepareStatement("UPDATE mytbl SET col[?] = CAST(? AS INT) WHERE id = ?");
PreparedStatement pstmt = con.prepareStatement("UPDATE mytbl SET col[?] = CAST(? AS TIMESTAMP) WHERE id = ?");