不推荐使用oracle.sql.DATUM。它的替代品是什么?

时间:2018-05-24 18:14:41

标签: 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_

1 个答案:

答案 0 :(得分:2)

因此,显示的代码检索由每个键和值组成的结构数组,即地图。

根据我从herehere收集到的内容,我希望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());
}

Haven未对其进行测试,但如果您不使用任何Oracle特定方法,则应该相对简单。