我正在尝试使用datastax java驱动程序来更新和查询具有映射字段的列族 . 有没有人关于如何使用Datastax Java驱动程序使用cql集合的示例?
谢谢
我将添加一些使用CQL集合的示例,其中包含对当前Java驱动程序doc的简单和预准备语句 .
您可以将CQL集合与预准备语句一起使用 . 快速入门部分的Java驱动程序文档中有一个示例 .
http://docs.datastax.com/en/developer/java-driver/2.0/java-driver/quick_start/qsSimpleClientBoundStatements_t.html
步骤4将Java HashSet对象绑定到songs表中的CQL set列 .
通常我会问你尝试了什么,但我知道这不在Java Driver的DataStax文档中 . 我会介绍一下对我有用的东西 .
有几点需要注意:
DataStax Cassandra Java类指导我将变量直接放入CQL文本字符串(而不是绑定映射) . 我在制作时工作(对于课堂视频) .
集合可以't be queried using DevCenter, so you'需要通过命令行使用 cqlsh 检查其值,如果您想查看它们在您的应用之外的内容 .
cqlsh
要更新现有行(在"users"表中有 Map<varchar,varchar> phone_numbers ),请尝试以下操作:
Map<varchar,varchar> phone_numbers
String cqlQuery = "UPDATE users SET phone_numbers = phone_numbers + "; cqlQuery += "{'" + phoneType + "':'" + phoneNumber+ "'} "; cqlQuery += "WHERE username = ?"; PreparedStatement preparedStatement = getSession().prepare(cqlQuery); BoundStatement boundStatement = preparedStatement.bind(user); getSession().execute(boundStatement);
更好的方法(假设 Map<String,String> phoneNumbers )是将集合绑定到预准备语句,如下所示:
Map<String,String> phoneNumbers
String cqlQuery = "UPDATE users SET phone_numbers = ? "; cqlQuery += "WHERE username = ?"; PreparedStatement preparedStatement = getSession().prepare(cqlQuery); BoundStatement boundStatement = preparedStatement.bind(phoneNumbers,user); getSession().execute(boundStatement);
同样,要把它读出来:
String cqlQuery2 = "SELECT phone_numbers FROM users WHERE username = ?"; PreparedStatement preparedStatement2 = getSession().prepare(cqlQuery2); BoundStatement boundStatement2 = preparedStatement2.bind(user); ResultSet result2 = getSession().execute(boundStatement2); Map<String,String> newMap = result2.one().getMap("phone_numbers", String.class, String.class);
他们今天刚刚在DataStax Academy的(免费)CAS101J课程中介绍了这一点 .
我是这样做的;这包含Cassandra中元组列的映射以及Cassandra中的映射列 . 我使用Scala和DataStax Cassandra Java Driver
需要进口
import java.lang import java.text.SimpleDateFormat import com.datastax.driver.core._ import com.datastax.driver.core.querybuilder.QueryBuilder import scala.collection.Map import org.apache.spark.SparkContext import org.apache.spark.SparkConf import com.datastax.spark.connector.cql.CassandraConnector import org.apache.spark.rdd.RDD import scala.collection.JavaConversions._
代码段
val simpleDateFormat: SimpleDateFormat = new SimpleDateFormat("dd-MM-yyyy H:mm:ss") val start_date: java.util.Date = simpleDateFormat.parse(val("StartTime").replaceAll(":(\\s+)", ":")) val b_tuple= session.getCluster().getMetadata().newTupleType(DataType.cint(), DataType.cint(), DataType.text()) val time_tuple = session.getCluster().getMetadata().newTupleType(DataType.timestamp(), DataType.timestamp()) val time_tuple_value = time_tuple.newValue(start_date, end_date) val b_tuple_value = bin_cell_tuple.newValue(b._1: lang.Integer, b._2: lang.Integer, val("xxx")) val statement_2: Statement = QueryBuilder.insertInto("keyspace", "table_name") .value("b_key", bin_cell_tuple_value) .value("time_key", time_tuple_value) .value("some_map", mapAsJavaMap(my_scala_map)) session.executeAsync(statement_2)
3 回答
我将添加一些使用CQL集合的示例,其中包含对当前Java驱动程序doc的简单和预准备语句 .
您可以将CQL集合与预准备语句一起使用 . 快速入门部分的Java驱动程序文档中有一个示例 .
http://docs.datastax.com/en/developer/java-driver/2.0/java-driver/quick_start/qsSimpleClientBoundStatements_t.html
步骤4将Java HashSet对象绑定到songs表中的CQL set列 .
通常我会问你尝试了什么,但我知道这不在Java Driver的DataStax文档中 . 我会介绍一下对我有用的东西 .
有几点需要注意:
DataStax Cassandra Java类指导我将变量直接放入CQL文本字符串(而不是绑定映射) . 我在制作时工作(对于课堂视频) .
集合可以't be queried using DevCenter, so you'需要通过命令行使用
cqlsh
检查其值,如果您想查看它们在您的应用之外的内容 .要更新现有行(在"users"表中有
Map<varchar,varchar> phone_numbers
),请尝试以下操作:更好的方法(假设
Map<String,String> phoneNumbers
)是将集合绑定到预准备语句,如下所示:同样,要把它读出来:
他们今天刚刚在DataStax Academy的(免费)CAS101J课程中介绍了这一点 .
我是这样做的;这包含Cassandra中元组列的映射以及Cassandra中的映射列 . 我使用Scala和DataStax Cassandra Java Driver
需要进口
代码段