gpt4 book ai didi

java - 如何在Java bean中存储Oracle Rowid

转载 作者:行者123 更新时间:2023-11-30 06:03:43 27 4
gpt4 key购买 nike

我正在调用一个存储过程,该过程返回行列表的 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;

最佳答案

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,所以也许整个方法无法解决你的问题。

关于java - 如何在Java bean中存储Oracle Rowid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51771817/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com