我在工作中继承了一些遗留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_
答案 0 :(得分:2)
因此,显示的代码检索由每个键和值组成的结构数组,即地图。
根据我从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());
}
Haven未对其进行测试,但如果您不使用任何Oracle特定方法,则应该相对简单。