我在工作中继承了一些遗留的 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/