如何在Java bean中存储Oracle Rowid

时间:2018-08-09 16:19:32

标签: java sql oracle procedure rowid

我正在调用一个存储过程,该存储过程返回行列表的rowid。我在用Java存储实际的rowid值时遇到了麻烦,因此我以后可以在以后的更新语句中使用该rowid。

例如:

Select name, age, ROWID, from myTable where rownum<20;

我可以存储姓名和年龄,但是当我尝试将ROWID存储在类似以下的字符串中时:

    setRowID(workTableResponseJson.getString("ROWID"));

public void setRowID(String rowid) {
    this.rowid = rowid;
}

该值不完全匹配。相反,我得到的值是:oracle.sql.ROWID@123a123b

有人知道如何在Java中正确存储rowid值,以便以后在后续语句中使用它吗?

谢谢。

编辑:APC回答了以下问题,我已将其标记为。谢谢。

问题出在查询本身。我需要更改:

select rowid

改为:

select ROWIDTOCHAR(ROWID)
这样,

java便能够将该值存储在字符串中。虽然,当我仍在使用时,我不需要按照要求进行第二次修改,因为它当前有效:

update name='bob' where rowid=:rowid;

1 个答案:

答案 0 :(得分:0)

ROWID可能看起来像一个字符串,但其数据类型不是字符串。 Oracle oracle.sql.ROWID class有一个toString()方法,因此您应该在Java中使用它。

但是看起来您正在使用JSON。因此,这可能不是适合您的解决方案。一种替代方法是将ROWID转换为SQL语句中的字符串:

Select t.name, t.age, ROWIDTOCHAR(t.rowid) as Row_id
from myTable t
where rownum<20;

这将为您提供一个可用作Java参数的字符串:

setRowID(workTableResponseJson.getString("Row_id"));

如果随后需要使用ROWID来标识行,则需要将其回退:

update myTable t
set t.age = 42
where t.rowid = CHARTOROWID(:row_id)

警告:我没有设置可以测试所有这些的设置,因此可能存在语法错误。而且,很明显,我不确定为什么首先要存储ROWID,所以也许整个方法都无法解决您的问题。