首页 文章

如何使用来自datastax的java api从语句中获取精确的cql

提问于
浏览
3

我的代码直接执行没有任何确切查询的边界语句 . 然后如何获取它试图在cassandra数据库中执行的cql?

例如:

public <T> void save(T entity) {
    if (entity != null) {
        Statement statement = getEntityMapper(entity).saveQuery(entity);
        statement.setConsistencyLevel(consistencyLevelWrite);
        mappingManager.getSession().execute(statement);
    }
}

我想尝试INSERT INTO "keyspace" . "tableName"("column1","column2")VALUES(value1,value2)

1 回答

  • 4

    我最通用的答案是启用query logger . 它将在应用程序日志中显示已执行的查询 .

    如果您需要更具体的内容并希望在自己的代码中操作查询字符串,您可以从实现中获取灵感:QueryLogger.java . 在这种特殊情况下,您可以通过转换为 BoundStatement 然后在其上调用 .preparedStatement().getQueryString() 来获取"generic"查询字符串(带占位符);然后检查绑定语句以获取占位符的值 . 正如您将在代码中看到的那样, QueryLogger 处理了许多极端情况(例如截断大型参数) .

相关问题