What you pass to
three types: simple (textual query), bound (prepared) and batch.
built-in implementations are immutable. Setters always return a new object, don’t ignore the result.
SimpleStatement: a simple implementation built directly from a character string. Typically used for queries that are executed only once or a few times.
BoundStatement (from PreparedStatement): obtained by binding values to a prepared query. Typically used for queries that are executed often, with different values.
BatchStatement: a statement that groups multiple statements to be executed as a batch.
All statement types share a common set of execution attributes, that can be set through either setters or a builder:
execution profile name, or the profile itself if it’s been built dynamically.
per-query keyspace (Cassandra 4 or above).
token-aware routing information (keyspace and key/token).
normal and serial consistency level.
custom payload to send arbitrary key/value pairs with the request (you should only need this if you have a custom query handler on the server).
When setting these attributes, keep in mind that statements are immutable, and every method returns a different instance:
SimpleStatement statement = SimpleStatement.newInstance("SELECT release_version FROM system.local"); // Won't work: statement isn't modified in place statement.setConfigProfileName("oltp"); statement.setIdempotent(true); // Instead, reassign the statement every time: statement = statement.setConfigProfileName("oltp").setIdempotent(true);
All of these mutating methods are annotated with
@CheckReturnValue. Some code analysis tools –
such as ErrorProne – can check correct usage at build time, and report
mistakes as compiler errors.
Note that some attributes can either be set programmatically, or inherit a default value defined in the configuration. Namely, these are: idempotent flag, query timeout, consistency levels and page size. We recommended the configuration approach whenever possible (you can create execution profiles to capture common combinations of those options).