Как получить точный 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 обрабатывает множество угловых случаев (например, обрезая большие параметры).

Другие вопросы по тегам