【问题标题】:How to store Oracle Rowid in Java bean如何在 Java bean 中存储 Oracle Rowid
【发布时间】:2019-01-17 04:51:15
【问题描述】:

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

【问题讨论】:

标签: java sql oracle procedure rowid


【解决方案1】:

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

【讨论】:

  • 使用 ojdb6.jar toString() 返回默认的 Object.toString() 输出。使用 ROWID .stringValue() 给出的结果与 Oracle 函数 ROWIDTOCHAR 匹配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
相关资源
最近更新 更多