Получение типа не может создать Double: класс oracle.kv.impl.api.table.IntegerDefImpl при получении объемных данных из Oracle NOSQL - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь получить объемные данные из таблицы Oracle NoSQL, используя класс Java.

//Connection part omitted
public static void main(String args[]) {
            try {
                LoadBulkData runLoader = new LoadBulkData();
                runLoader.run();
            } catch (Exception e) {
                System.err.print("Error: " + e.getMessage());
            }
        }



        void run() {
            Integer[] myId = {100,101};
            List keys =
                    new ArrayList(myId.length);

            TableAPI tableAPI = store.getTableAPI();
            Table myTable = tableAPI.getTable(tableName);
            if (myTable == null) {
                throw new IllegalArgumentException("Table not found: " + tableName);
            }

            for (Integer id : myId) {
                PrimaryKey pk = myTable.createPrimaryKey();
                pk.put("UID", id);
                keys.add(pk);
            }   
            FieldRange range = myTable.createFieldRange("myId");
            range.setStart(100d, true).setEnd(500d, true);
            MultiRowOptions mro = new MultiRowOptions(range, null, null);

            int batchResultsSize = 200;
            int parallalism = 9;
            TableIteratorOptions tio =
                    new TableIteratorOptions(Direction.UNORDERED ,
                            null ,
                            0 ,
                            null,
                            parallalism,
                            batchResultsSize);

            TableIterator itr = null;
            int count = 0;
            try {
                itr = tableAPI.tableIterator(keys.iterator(), mro, tio);
                while (itr.hasNext()) {
                    Row myRow = (Row) itr.next();
                    System.out.println(myRow.toJsonString(false));
                    count++;
                    /* ... */
                }
                System.out.println(count + " rows to print.");
            } catch (StoreIteratorException sie) {

            } finally {
                if (itr != null) {
                    itr.close();
                }
            }
        }
    }

ниже приведена структура таблицы

->show table -name SampleTable
  {
      "json_version" : 1,
      "type" : "table",
      "name" : "SampleTable",
      "owner" : "root(id:u1)",
      "shardKey" : [ "myId" ],
      "primaryKey" : [ "myId" ],
      "fields" : [ {
        "name" : "myId",
        "type" : "INTEGER",
        "nullable" : false,
        "default" : null
      }, {
        "name" : "myString",
        "type" : "STRING",
        "nullable" : true,
        "default" : null
      } ]
    }

Во время выполнения этого я получаю ниже Ошибка: -

Тип не может создать Double: класс oracle.kv.impl.api.table.IntegerDefImpl

Может кто-нибудь помочь, пожалуйста? Я новичок в NoSQL и заранее большое спасибо.

1 Ответ

0 голосов
/ 24 мая 2019

Это из-за ошибки приведения. Вы пытаетесь вставить двойное значение в поле, которое ожидает целое число.

Вам необходимо использовать:

public FieldRange setStart (значение типа int, логическое значение isInclusive)

...