java - oracle.sql.DATUM 已弃用。它的替代品是什么?

标签 java oracle deprecated

我在工作中继承了一些遗留的 Java,它正在使用 oracle.sql 导入。我设法导入了 java.sql 并对遗留代码的类引用做了一些小改动,一切似乎都运行良好;但是,我偶然发现了一个 Datum 对象。我试图在 java.sql 中找到它的等效项,但我不知道 Datum 的作用,甚至不知道它的含义。 java.sql 中似乎没有包含 Datum 对象的类,所以我想知道它的替代品是什么。

我查看了 Oracle 的文档 @ https://docs.oracle.com/database/121/JAJDB/oracle/sql/Datum.html 这不是很有帮助,至少对我来说不是。

这是一个片段,目的只是为了了解该类在遗留中的使用情况

  import oracle.sql.ARRAY;
  import oracle.sql.Datum;       


  ARRAY arr = getArray(dataRow, "FORM_DATA", false);
  Map<String, String> kvMap = new HashMap<String, String>();
  try {                 
        Datum[] dat = arr.getOracleArray();
         for (int i=0;i<dat.length;i++){
             Object[] element = ((oracle.sql.STRUCT) dat[i]).getAttributes();
             String key = (String)element[0];
             String value = (String)element[1];
             kvMap.put(key, value); 
        }
    } catch (SQLException e) {
        Log.logError(this, e.getMessage());
    }
    ....

getOracleArray() 方法可以在这里看到:https://docs.oracle.com/database/121/JAJDB/oracle/sql/ARRAY.html#getOracleArray_long__int_

最佳答案

所以显示的代码检索了一个由键和值组成的结构数组,即一个映射。

根据我从 here 中收集到的信息和 here我希望符合 JDBC 的代码看起来像下面这样

import java.sql.Array;
import java.sql.Struct;

// getArray() must be modified to return a java.sql.Array, but that should be
// nothing but rs.getArray() (or dataRow.getArray())
Array arr = getArray(dataRow, "FORM_DATA", false);
Map<String, String> kvMap = new HashMap<String, String>();
try {                 
   Struct[] dat = (Struct[])arr.getArray();
   for (Struct s : dat) {
       Object[] element = s.getAttributes();
       String key = (String)element[0];
       String value = (String)element[1];
       kvMap.put(key, value); 
   }
} catch (SQLException e) {
   Log.logError(this, e.getMessage());
}

尚未测试,但如果您不使用任何 Oracle 特定方法,它应该相对简单。

关于java - oracle.sql.DATUM 已弃用。它的替代品是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50515709/

相关文章:

Java GC - 有没有办法确定收集了哪些对象

java - 如何将文件复制到特定路径?

sql - 查询 Oracle SCOTT 模式 - 最接近平均水平的薪水是多少?

java - 转义序列是否保留在 CLOB 中?

ios - NSString cString 已弃用。有什么选择?

java - 如何在 SQLite Android 中不存在的地方插入一个值

java - Swing:在主 JFrame 上执行操作

c# - 具有特殊(丹麦语)字符的 Oracle 表列名称。无法执行sql查询

visual-studio-2013 - Visual Studio不推荐使用Opencl函数

java - Oracle 是否删除了 Sun net.ftp 类?