是否可以使用单个准备好的语句插入填充类型为 set<text> 的列的记录?
Posted
技术标签:
【中文标题】是否可以使用单个准备好的语句插入填充类型为 set<text> 的列的记录?【英文标题】:Is it possible to insert a record that populates a column with type set<text> using a single prepared statement? 【发布时间】:2021-01-20 09:42:40 【问题描述】:当记录包含一个集合并打算应用于一个“集合”类型的字段时,是否可以使用准备好的语句插入记录?
我可以看到如何使用 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() 方法返回一个分配,并且这似乎只能与 QueryBuilder.update() 一起使用,而不能与 QueryBuilder.insertInto() 一起使用。有什么方法可以一步插入该记录,还是我必须先调用 QueryBuilder.insertInto() 而将设置列留空,然后再使用使用 addAll() 的后续调用 QueryBuilder.update() 填充它?
【问题讨论】:
【参考方案1】:我想出了如何做到这一点。关键是调用无参数 PreparedStatement.bind(),然后将其与 setXXX 方法的调用链接起来,使用 setSet() 设置值。所以像这样 -
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"));
【讨论】:
以上是关于是否可以使用单个准备好的语句插入填充类型为 set<text> 的列的记录?的主要内容,如果未能解决你的问题,请参考以下文章