我在cassandra中执行了一个查询,其中我有3列,数据类型为List的第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选项,但它无法正常工作并引发异常,因此无法找到任何其他方法。
因此无法附加示例代码。
答案 0 :(得分:1)
Alex很好地说明了您的数据采用的是列表格式,而不是Map。话虽如此,我将在DataStax Java Driver v3.6中发布代码,展示如何拉回List和Map。
首先,我创建了具有两种类型的集合的示例表,并添加了一些值:
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}