微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决是否可以使用一条准备好的语句插入一条记录,该记录以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"));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。