我有 table emp(id,name,list<frozen<address>>)
. 这里的地址是cassandra UDT,定义为 create TYPE address (hno int,street text);
. 我试图使用下面的代码读取emp中给定id的所有地址,我收到以下错误:
线程“main”中的异常com.datastax.driver.core.exceptions.CodecNotFoundException:找不到请求操作的编解码器:[frozen <'address'> < - > com.xyz.cassandra.address]
String query1="select * from iotbilling.emp where id=?";
PreparedStatement preparedStatement2=this.session.prepare(query1);
BoundStatement boundStatement2=preparedStatement2.bind(4);
ResultSet rs2=this.session.execute(boundStatement2);
Row row2=rs2.one();
List<address> addresses=row2.getList("adresses",address.class);
System.out.println("Addresses retrieved");
for(address adr:addresses)
System.out.println(adr.toString());
`
在这里,如何捕获从cassandra返回的java代码中的冻结地址列表?
2 回答
您可以从行读取值并逐行读取元数据:
例如:
Update with list example
对于列表,它应该看起来像:
然后,您可以轻松遍历列表并访问数据字段 .
最好
您可能希望使用datastax Mapper来实现此目的 . 您必须使用如下所示的Datastax注释声明Java表并键入Table:
你的UDT注释如下:
如果还没有,可能需要事先将以下依赖项添加到pom.xml文件中
完成这些步骤后,您需要使用Mapper对象来获得结果:
一旦你得到resultSet使用mapper得到:
现在,您可以将emp作为java对象访问,并使用emp.getAddress访问您的列表 .