oracle.sql.DATUM устарела.Какова его замена? - PullRequest
0 голосов
/ 24 мая 2018

Я унаследовал некоторую унаследованную Java на работе, и она использует oracle.sql import.Вместо этого мне удалось импортировать 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 голосов
/ 25 мая 2018

Таким образом, показанный код извлекает массив структур, состоящих из ключа и значения каждого, то есть карты.

На основании того, что я почерпнул из здесь и здесь Я ожидаю, что код, совместимый с 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, он должен быть относительно простым.

...