当前位置: 首页 > 知识库问答 >
问题:

如何使用java中的cassandra驱动程序从UDT集合(例如:list)中读取UDT?

翟迪
2023-03-14

我有表emp(id,name,list

线程“main”com中出现异常。数据税。驾驶员果心例外情况。CodeNotFoundException:找不到请求操作的编解码器:[已冻结]

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());

'

这里,如何在java代码中捕获从cassandra返回的冻结地址列表?


共有2个答案

楚弘益
2023-03-14

为此,您可能需要使用datastax映射器。您必须使用Datastax注释声明Java表和类型表,如下所示:

    @Table(keyspace = "corporate", name = "emp")
     public class Employee{

          @PartitionKey(0)
          @Column(name = "id")
           private Integer id;

          @Column(name = "name")
           private String name;

          @Frozen
          @Column(name = "address_list")
          private List<Address> address;

          ...(Getter and Setters)
     }

您的UDT注释如下:

     @UDT(keyspace = "corporate", name="address")
     public class Address{

          @Field(name="hno")
          private Integer hno;

          @Field(name="street")
          private String street;

          ...(Getters and Setters)
     }

如果没有,您可能希望事先将以下依赖项添加到pom.xml文件中

    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-core</artifactId>
        <version>3.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-mapping</artifactId>
        <version>3.3.0</version>
    </dependency>

完成这些步骤后,您需要使用Mapper对象来获得结果:

    MappingManager manager = new MappingManager(this.session);
    Mapper<Employee> mapper = manager.mapper(Employee.class);

一旦你得到结果集使用映射器得到:

    Result<Employee> list = mapper.map(rs2);
    Employee emp = list.one();

现在您可以作为java对象访问emp并使用emp。获取访问列表的地址。

江光明
2023-03-14

您可以从行读取值并逐行读取元数据:

UDTValue udtData = row.getUDTValue(address);

例如:

udtData.getString("name");

用列表示例更新

对于列表,它可能如下所示:

List<UDTValue> udtDataList = row.getList("adresses", UDTValue.class)

然后,您可以轻松地遍历列表并访问数据字段。

最好的

 类似资料:
  • 所以我在Cassandra数据库中有一个UDT: 当我查询这个时,我可以得到UDTValue,但我不确定如何映射到UDTClass,因为我使用的是Cassandra Java驱动程序2.2.0rc3 在2.1中,有一些类似于本教程的说明。但在2.2.0中,这个(UDTMapper)似乎已经被删除或尚未添加。怎样才能做同样的事情,或者仅仅为了达到同样的效果? 谢谢。

  • 我试图用用户定义的类型作为分区键在cassandra中存储对象。我使用datastax java驱动程序进行对象映射,虽然我能够插入到数据库中,但我无法检索对象。如果我将分区键更改为使用非udt(如文本),我就能够保存和检索(即使对象上有其他相同类型的udt)。从阅读文档中可以看出,允许UDT作为密钥。我也没有发现任何迹象表明java驱动程序不支持UDT作为键。在对象映射过程中,它看起来是失败的,

  • 我是卡桑德拉和莫文的新手。我试图在eclipse中编写一个简单的java程序,它使用cassandra java驱动程序连接到我设置的cassandra节点。我找到了这个存储库https://github.com/datastax/java-driver但我不知道该怎么处理它。有谁能给我一步一步的说明来获取驱动程序并创建一个使用驱动程序的简单eclipse项目吗。

  • 作为mongodb世界的新成员,当我试图在一个集合中复制一个mongo文档时遇到了麻烦。复制的意思是,我想把旧文档复制到一个新文档中,这个新文档有一个new _id字段,并改变几个字段的值。 mongodb java驱动程序是我的操作环境。 有人已经这样做了吗?

  • 问题内容: 从Mongodb客户端,我们可以使用db.Collection.stats()来获取集合状态,例如: +记录数(计数) +磁盘 大小(storageSize) +索引(indexSizes) +平均对象大小(avgObjSize) 现在,我想使用Mongodb Java驱动程序从Web后端监视这些数据,请让我知道如何获取它们? 我已经提到:http : //mongodb.github

  • 从Mongodb客户端,我们可以使用db.collection.stats()获取集合的状态,例如: +记录数(count) +磁盘上的大小(storageSize) +索引(indexsize) +平均对象大小(avgObjSize) 现在我想用Mongodb java驱动程序从web后端监控这些数据,请让我知道如何获取它们? 我提到了:http://mongodb.github.io/mong