2014-11-24 50 views
2

我想使用PreparedStatementsolr_query使用下面的代碼:在DataStax使用PreparedStatement的與solr_query企業

PreparedStatement preparedStatement = cassandraSession.prepare(
    "SELECT * FROM users WHERE solr_query = 'username:? OR email:?';" 
); 

BoundStatement boundStatement = new BoundStatement(preparedStatement); 

ResultSet results = cassandraSession.execute(
    boundStatement.bind(
     username, 
     email 
    ) 
); 

當我執行上面的代碼中,我得到以下異常: java.lang.IllegalArgumentException: Prepared statement has only 0 variables, 2 values provided

我如何正確使用solr_query準備好的語句?

我使用的是使用Cassandra 2.0.11.82和Solr 4.6.0.2.8的DataStax Enterprise 4.5.3。我正在使用DataStax Java驅動程序。

回答

5

對不起,但CQL不支持字符串常量中的變量替換,只能用於完整的字符串常量。無論如何,Solr查詢字符串在每個SELECT語句執行時都會被再次解析,因此讓Solr查詢字符串「準備好」不會節省任何開銷,因此您應該簡單地將整個Solr查詢字符串作爲預準備語句變量提供,如「WHERE solr_query = ?」。

+1

謝謝你的解釋。將準備好的聲明提供給整個solr字符串的想法聽起來很棒。再次感謝您的時間。 – kazy 2014-11-24 13:40:37