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

use*_*168 4 java cassandra datastax-enterprise datastax-java-driver datastax

我的代码直接执行准备好的绑定语句,没有任何确切的查询。那么如何获得它试图在 cassandra 数据库中执行的 cql?

例如:

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

我想得到类似INSERT INTO "keyspace"."tableName"("column1","column2") VALUES (value1,value2)

Oli*_*lat 7

我最通用的答案是启用查询记录器。它将在您的应用程序日志中显示已执行的查询。

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