Cassandra / Datastax: Как получить значения столбца, имеющего тип данных списка в Java - PullRequest
1 голос
/ 09 июля 2019

Я выполнил запрос в Кассандре, где у меня есть 3 столбца, как и в 3-м столбце с типом данных в виде списка. Результат запроса имеет следующий формат:

||Col 1 (varchar)||Col 2 (varchar)||Col 3 (list)||
|value 1.1|value 2.1|{"option 1":"value 1","option 2":"value 2"}

Я хочу получить значение 3 столбца исохранить в некоторой переменной

Я попробовал опцию .getList, но она не работает и выдает исключение и, следовательно, не может найти какой-либо другой подход.

Следовательно, не удается присоединить пример кода.

1 Ответ

1 голос
/ 09 июля 2019

Алекс хорошо отмечает, что ваши данные находятся в формате списка, а не на карте. При этом я опубликую код с помощью DataStax Java Driver v3.6, показывающий, как получить обратно и Список, и Карту.

Сначала я создал образец таблицы с обоими типами коллекций и добавил несколько значений:

aaron@cqlsh:stackoverflow> CREATE TABLE collections (key TEXT PRIMARY KEY,
   testList LIST<TEXT>, testMap MAP<TEXT,TEXT>);
aaron@cqlsh:stackoverflow> INSERT INTO collections (key,testList,testMap)
   VALUES ('a',['one','two','three'],{'option 1':'value 1','option 2':'value 2','option 3':'value 3'});

Я подтвердил, что работает с простым запросом:

aaron@cqlsh:stackoverflow> SELECT key, testlist, testmap
    FROM stackoverflow.collections WHERE key='a';

 key | testlist                | testmap
-----+-------------------------+-----------------------------------------------------------------------
   a | ['one', 'two', 'three'] | {'option 1': 'value 1', 'option 2': 'value 2', 'option 3': 'value 3'}

(1 rows)

Я создал простое приложение, используя пользовательский класс CassandraConnection, который обрабатывает мой кластер и объекты сеанса, подключается и запускает простой session.execute(strQuery);. Затем в моем тестовом приложении Java это работает:

String strSELECT2 ="SELECT key, testlist, testmap "
        + "FROM stackoverflow.collections WHERE key='a'";       
ResultSet rows2 = conn.query(strSELECT2);

for (Row row : rows2) {
    System.out.print(
        row.getString("key") + " " +
        "\nList:" + row.getList("testlist", String.class).toString() + " " +
        "\nMap:" + row.getMap("testmap", String.class, String.class));
}

И выдает такой результат:

a 
List:[one, two, three] 
Map:{option 1=value 1, option 2=value 2, option 3=value 3}
...