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