Как получить точный CQL из оператора, используя Java API из Datastax
Мой код непосредственно выполняет связанный оператор, подготовленный без какого-либо точного запроса. Тогда как получить cql, который он пытается выполнить в базе данных cassandra?
Например:
public <T> void save(T entity) {
if (entity != null) {
Statement statement = getEntityMapper(entity).saveQuery(entity);
statement.setConsistencyLevel(consistencyLevelWrite);
mappingManager.getSession().execute(statement);
}
}
Я пытаюсь получить что-то вроде INSERT INTO "пространство ключей"."TableName"("column1","column2") VALUES (value1,value2)
1 ответ
Мой самый общий ответ - включить регистратор запросов. Он покажет выполненные запросы в журналах вашего приложения.
Если вам нужно что-то более конкретное и вы хотите манипулировать строкой запроса в своем собственном коде, вы можете черпать вдохновение в реализации: QueryLogger.java. В этом конкретном случае вы можете получить "общую" строку запроса (с заполнителями), приведя к BoundStatement
а затем вызывать .preparedStatement().getQueryString()
в теме; затем проверьте связанный оператор на наличие значений заполнителей. Как вы увидите в коде, QueryLogger
обрабатывает множество угловых случаев (например, обрезая большие параметры).