如何使用来自 datastax 的 java api 从语句中获取精确的 cql
How to get exact cql from statement using java api from 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);
}
}
我正在尝试获取类似 INSERT INTO "keyspace"."tableName"("column1","column2") VALUES (value1,value2)
我最通用的答案是启用 query logger。它将在您的应用程序日志中显示已执行的查询。
如果您需要更具体的东西并希望在您自己的代码中操作查询字符串,您可以从实现中获取灵感:QueryLogger.java。在这种特殊情况下,您可以通过强制转换为 BoundStatement
然后在其上调用 .preparedStatement().getQueryString()
来获取 "generic" 查询字符串(带占位符);然后检查占位符值的绑定语句。正如您将在代码中看到的那样,QueryLogger
处理了很多极端情况(例如截断大参数)。
我的代码直接执行准备好的绑定语句,没有任何确切的查询。那么如何获取它试图在 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)
我最通用的答案是启用 query logger。它将在您的应用程序日志中显示已执行的查询。
如果您需要更具体的东西并希望在您自己的代码中操作查询字符串,您可以从实现中获取灵感:QueryLogger.java。在这种特殊情况下,您可以通过强制转换为 BoundStatement
然后在其上调用 .preparedStatement().getQueryString()
来获取 "generic" 查询字符串(带占位符);然后检查占位符值的绑定语句。正如您将在代码中看到的那样,QueryLogger
处理了很多极端情况(例如截断大参数)。