当前位置: 首页 > 知识库问答 >
问题:

找不到带有Scala编解码器的Datastax Cassandra驱动程序

邵胜涝
2023-03-14
  1. DataStax驱动程序Cassandra版本:3.3.2
  2. Scala版本:2.12.4

我正在为Cassandra的datastax java驱动程序中的mappingmanager创建一个scala包装器。

CREATE TABLE todo (
    id UUID,
    title TEXT,
    completed boolean,
    PRIMARY KEY((id), completed, title)
)  WITH CLUSTERING ORDER BY (completed ASC, title ASC);
private def executeAsync(query: String, params: Any*): Future[ResultSet] = {
    params match {
      case Seq() =>
        session.executeAsync(query) // had a problem with empty params varargs
      case _ =>
        prepareAsync(query).map(preparedStatement =>
          preparedStatement.bind(
            params
              .map(x => {
                println(x) // correctly prints the param
                x.asInstanceOf[Object]
              })
          )
        ).flatMap(x => {
          println("here") // never gets printed
          session.executeAsync(x)
        })
    }
  }

  private def prepareAsync(query: String): Future[PreparedStatement] = {
    session.prepareAsync(query)
  }
val future: Future[List[TodoCassandra]] = customMappingManager.executeQueryAsync("SELECT * FROM todo;")
    future.onComplete {
      case Success(x) =>
        println(x)
    }
val future: Future[List[TodoCassandra]] = customMappingManager.executeQueryAsync("INSERT INTO todo (id, title, completed) VALUES (uuid(), ?, ?)", "prepared statement test", false)

val future: Future[List[TodoCassandra]] = customMappingManager.executeQueryAsync("INSERT INTO todo (id, completed, title) VALUES (uuid(), ?, ?)", false, "prepared statement test")

val future: Future[List[TodoCassandra]] = customMappingManager.executeQueryAsync("SELECT * FROM todo WHERE id = ?", "a8a6da8b-3d0e-40b3-99e5-fe2f664f50d0")
    null

为什么它总是从Scala.Collection.Mutable.ArrayBuffer“转换”?解决这个问题的方法是什么?

共有1个答案

刘承悦
2023-03-14

在使用从Scala教程查询Cassandra时,我遇到了与您类似的问题。

您的executeAsync方法与本文中的方法类似,并且具有相同的缺陷。也就是说,在PreparedStatement.bind期间,在将每个any项强制转换为Object之后,您传递一个seq[Object]。而这似乎失败了。

简单的解决方法是,按照Java方法的实际要求,将该序列作为var-args传递。

代码:

def execute(statement: Future[PreparedStatement], params: Any*)
           (implicit executionContext: ExecutionContext, session: Session): Future[ResultSet] = {
  val p = params.map(_.asInstanceOf[Object])
  statement
    .map(_.bind(p: _*))
    .flatMap(session.executeAsync(_))
}
 类似资料:
  • scala-mongo-driver有一个处理case类的很好的文档。http://mongodb.github.io/mongo-scala-driver/2.3/getting-start/quick-tour-case-classs/。在当前情况下,我的case类字段是option[T]值。因此值可以是或。默认编解码器现在将“none”值序列化为null。但如果键的值为none,我想排除它。

  • 我想将FieldMmap类的集合保存为json字符串- ... etc-完整代码:https://github.com/alexeyOnGitHub/scala-typesafe/blob/master/src/main/scala/com/example/model/Field.scala Circe代码: 错误:(14,65)找不到io类型的延迟隐式值。circe。通用的解码。DerivedD

  • 我有一个简单的类叫做Signal。课程内容如下: 我试图在MongoDB(v3.4)插入信号。我使用以下方法插入: 我得到了以下例外: org.bson.codecs.configuration.代码配置异常:找不到in.co.mysite.webapi.models.Signal类的编解码器。 我在这里检查了一个类似的问题,但是插入代码不同。我从回答中得到提示,修改了我的方法,但看起来不干净。修

  • 问题内容: 输出 >无法连接到数据库服务器java.lang.ClassNotFoundException 问题答案: 看来您应该将MySQL驱动程序jar放入 类路径中 。

  • 问题内容: 我刚刚用Apache,MySQL和PHP安装了Debian Lenny,并且收到了PDOException 。 这是它所指的特定代码行: ,,,和是我所定义的常量。它在生产服务器(以及我以前的Ubuntu Server设置)上运行良好。 这与我的PHP安装有关吗? 搜索互联网没有帮助,我得到的只是专家交流和示例,但没有解决方案。 问题答案: 您需要有一个名为pdo_mysql的模块。在