Java 使用Cassandra重新准备查询-在何处初始化PreparedStatement

Java 使用Cassandra重新准备查询-在何处初始化PreparedStatement,java,cassandra-3.0,datastax-java-driver,Java,Cassandra 3.0,Datastax Java Driver,我使用的是Cassandra3.x。我有很多方法,我在其中准备查询并简单地执行它们。一开始看起来很简单 query.append("SELECT * FROM alarms WHERE alarm_id=").append(alarmId); query.append(" AND date<").append(date); ResultSet resultSet = dataSource.executeQuery(query.toString()); query.append(“从ala

我使用的是Cassandra3.x。我有很多方法,我在其中准备查询并简单地执行它们。一开始看起来很简单

query.append("SELECT * FROM alarms WHERE alarm_id=").append(alarmId);
query.append(" AND date<").append(date);
ResultSet resultSet = dataSource.executeQuery(query.toString());
query.append(“从alarm_id=“”的报警中选择*).append(alarmId);

query.append("根据上面的帖子,我应该初始化PreparedStatement一次。我应该在哪里做?在什么地方?将所有准备好的查询放入您的
数据源
对象中,并在您建立会话时初始化。有不同的方法可以这样做。例如,您可以定义一个类,该类将在ery&prepared语句,您可以定义查看此映射的方法,如果还没有准备好的语句,则它会准备并放入映射,因此此方法的下一个请求将返回已准备好的语句只需小心使用多线程-使用ConcurrentHashMap或显式锁(第一个更好)
query.append("SELECT * FROM alarms WHERE alarm_id=? AND date<?");
PreparedStatement pS = dataSource.getSession().prepare(query.toString());
BoundStatement bS = pS.bind().setInt(0, alarmId).setDate(1, date);
ResultSet rS = dataSource.session.execute(bS);
Re-preparing already prepared query is generally an anti-pattern and will likely affect performance. Consider preparing the statement only once. Query='SELECT * FROM alarms WHERE alarm_id=? AND date<=?'