【问题标题】:fetch row id from oracle using Java使用 Java 从 oracle 获取行 id
【发布时间】:2019-05-12 04:48:25
【问题描述】:

我需要使用 Java 从 Oracle 数据库中获取 rowid。我使用了下面的代码。

Statement st = con.createStatement();
ResultSet rs=st.executeQuery("select * from ABC");
while(rs.next()) {
            RowId str=rs.getRowId(1);        
            System.out.println(str);
        }

我得到的结果是

oracle.sql.ROWID@2ce6c6ec
oracle.sql.ROWID@1bae316d

但我需要像

这样的十六进制值
AAAdItACwAABXcIAAA

有人可以指导我吗?

谢谢

【问题讨论】:

  • 您可能使用的是过时的 JDBC 驱动程序,因为较新的驱动程序正确实现了ROWID.toString()
  • 如您所见in the documentation - toString() 以特定于提供连接的驱动程序的形式返回其 ROWID 的内容,并且可能不是作为 ROWID 文字 .你真正想要得到什么?如果您尝试加载 ID 列 - 只需按列名进入
  • 试试这个,看看它是否能打印出你想要的东西System.out.println(new String(rowId.getBytes()));
  • @a_horse_with_no_name 请告诉我正确的驱动程序。我可以使用哪个版本。
  • @PushpeshKumarRajwanshi 谢谢 ..这似乎有效,我能够获取值。

标签: java oracle jdbc oracle11g oracle10g


【解决方案1】:

您可以使用https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/DatatypeConverter.html#printHexBinary%28byte%5B%5D%29

这将直接为您提供十六进制值

String hexValue = DatatypeConverter.printHexBinary(resultSet.getRowId(10).getBytes())

这是完整的代码

Statement st = con.createStatement();
ResultSet rs=st.executeQuery("select * from ABC");
while(rs.next()) 
{
    String str= DatatypeConverter.printHexBinary(resultSet.getRowId(1).getBytes())       
    System.out.println(str);
}

【讨论】:

    【解决方案2】:

    来自 Java 文档

    检索 RowId 对象通过调用检索 java.sql.RowId 对象 接口 ResultSet 和中定义的 getter 方法 可调用语句。返回的 RowId 对象是不可变的 您可以将其用作后续推荐的唯一对象 标识符到一行。下面是一个调用的例子 ResultSet.getRowId 方法:

    java.sql.RowId rowId_1 = rs.getRowId(1);
    

    字符串 toString() 返回一个字符串,表示此 java.sql.RowId 对象指定的 SQL ROWID 的值。

    猜你喜欢
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2014-11-01
    • 2020-05-23
    相关资源
    最近更新 更多