我正在尝试使用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的预准备语句?
我正在使用DataStax Enterprise 4.5.3,它使用Cassandra 2.0.11.82和Solr 4.6.0.2.8。我正在使用DataStax Java驱动程序。
答案 0 :(得分:5)
很抱歉,但CQL不支持字符串常量中的变量替换,仅支持完整的字符串常量。无论如何,在每个SELECT语句执行时再次解析Solr查询字符串,因此使用Solr查询字符串"准备好"不会节省开销,所以你应该简单地将整个Solr查询字符串作为预备语句变量提供,如" WHERE solr_query =?"。