如何在javabean中存储Oracle Rowid
我正在调用一个存储过程,该过程返回行列表的rowid。我在Java中存储实际的rowid值时遇到了问题,因此以后可以将该rowid用于后续更新语句 例如:如何在javabean中存储Oracle Rowid,java,sql,oracle,procedure,rowid,Java,Sql,Oracle,Procedure,Rowid,我正在调用一个存储过程,该过程返回行列表的rowid。我在Java中存储实际的rowid值时遇到了问题,因此以后可以将该rowid用于后续更新语句 例如: Select name, age, ROWID, from myTable where rownum<20; 该值不完全匹配。相反,我得到的值是:oracle.sql。ROWID@123a123b 有人知道如何在Java中正确地存储rowid值,以便以后在后续语句中使用它吗 多谢各位 编辑:APC回答了下面的问题,我已经做了标记。多谢
Select name, age, ROWID, from myTable where rownum<20;
该值不完全匹配。相反,我得到的值是:oracle.sql。ROWID@123a123b
有人知道如何在Java中正确地存储rowid值,以便以后在后续语句中使用它吗
多谢各位
编辑:APC回答了下面的问题,我已经做了标记。多谢各位
问题在于查询本身。我需要改变:
select rowid
改为:
select ROWIDTOCHAR(ROWID)
java随后能够将该值存储在字符串中。尽管如此,我不需要按照要求进行第二次修改,因为在我仍然使用以下工具时,它目前可以工作:
update name='bob' where rowid=:rowid;
ROWID可能看起来像字符串,但其数据类型不是字符串。有一个
toString()
方法,所以您应该在Java中使用它
但看起来您正在使用JSON。因此,这可能不是适合您的解决方案。另一种方法是将ROWID强制转换为SQL语句中的字符串:
Select t.name, t.age, ROWIDTOCHAR(t.rowid) as Row_id
from myTable t
where rownum<20;
如果随后需要使用ROWID标识行,则需要将其回滚:
update myTable t
set t.age = 42
where t.rowid = CHARTOROWID(:row_id)
警告:我没有测试所有这些的设置,所以可能有语法错误。而且,很明显,我不知道为什么首先要存储rowid,所以整个方法可能无法解决您的问题 >您可能想考虑是否存储RoWID是一个好主意,正如这里所解释的:使用OJDB6JAR <代码> toStrug()/Curry>返回默认的<代码>对象.toStrug()/<代码>输出。使用
ROWID
.stringValue()
会给出与Oracle函数ROWIDTOCHAR
setRowID(workTableResponseJson.getString("Row_id"));
update myTable t
set t.age = 42
where t.rowid = CHARTOROWID(:row_id)