是否可以使用一条准备好的语句插入一条记录,该记录以set <text>类型填充列?

问题描述

当记录包含Set并打算应用于类型为“ set”的字段时,是否可以使用准备好的语句插入记录?

我可以看到如何使用QueryBuilder.update-

Update.Where setInsertionQuery = QueryBuilder.update(keyspaceName,tableName)
    .with(QueryBuilder.addAll("set_column",QueryBuilder.bindMarker()))
    .where(QueryBuilder.eq("id_column",QueryBuilder.bindMarker()));
                
PreparedStatement preparedStatement = keyspace.prepare(setInsertionQuery.toString());
Set<String> set = new HashSet<>(Collections.singleton("value"));
BoundStatement boundStatement = preparedStatement.bind(set,"id-value");

但是,该QueryBuilder.addAll()方法返回一个Assignment,它似乎仅可用于QueryBuilder.update(),而不能用于QueryBuilder.insertInto()。有什么办法可以一步插入该记录,还是我必须先调用QueryBuilder.insertInto()而将set列保留为空白,然后再使用随后的调用来填充它,而QueryBuilder.update()也使用addAll() ?

解决方法

我想出了办法。关键是调用no-arg PreparedStatement.bind(),然后使用setSet()作为设置值将其链接到对setXXX方法的调用。像这样-

Insert insertSet = QueryBuilder.insertInto(tableName)
                .value("set_column",QueryBuilder.bindMarker("set_column"))
                .value("id_column",QueryBuilder.bindMarker("id_column")));
    
PreparedStatement preparedStatement = keyspace.prepare(setInsertionQuery.toString());
Set<String> set = new HashSet<>(Collections.singleton("value"));

BoundStatement boundStatement = preparedStatement.bind()
.setSet("id_column",set,String.class))
.setString("id_column","id value"));