首页 文章

有关如何将map cql类型与DataStax java驱动程序一起使用的示例

提问于
浏览
5

我正在尝试使用datastax java驱动程序来更新和查询具有映射字段的列族 . 有没有人关于如何使用Datastax Java驱动程序使用cql集合的示例?

谢谢

3 回答

  • 4

    我将添加一些使用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列 .

  • 5

    通常我会问你尝试了什么,但我知道这不在Java Driver的DataStax文档中 . 我会介绍一下对我有用的东西 .

    有几点需要注意:

    • DataStax Cassandra Java类指导我将变量直接放入CQL文本字符串(而不是绑定映射) . 我在制作时工作(对于课堂视频) .

    • 集合可以't be queried using DevCenter, so you'需要通过命令行使用 cqlsh 检查其值,如果您想查看它们在您的应用之外的内容 .

    要更新现有行(在"users"表中有 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 )是将集合绑定到预准备语句,如下所示:

    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课程中介绍了这一点 .

  • 0

    我是这样做的;这包含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)
    

相关问题