2

我的代码直接执行没有任何确切查询准备的绑定语句。那么如何获得它正试图在cassandra数据库中执行的cql?如何从datastax使用java api得到确切的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 “密钥空间”, “表名”( “列1”, “列2”)VALUES(值1,值2)

+0

您可能想要提供更多详细信息,如显示如何构建和执行绑定语句的代码。还有什么你的意思是“没有任何确切的查询”? –

+0

刚刚添加了一个示例 – user3870168

回答

1

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

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

+0

非常感谢您的信息。不幸的是,QueryLogger记录的消息不是我们想要的。最重要的是,我用MaxQueryStringLength(Integer.MAX_VALUE)设置的事件,它仍然会截断我们的INSERT查询。我想剩下的唯一方法是编写我们自己的查询记录器。 – user3870168