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

oracle.sql.DATUM is deprecated. What is its replacement?

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

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

这是一个片段,目的只是为了了解 class 在旧版中的使用方式

  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 and 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 特定方法,它应该相对简单。