To execute a CQL query, you create a Statement instance and pass it to Session#execute or Session#executeAsync. The driver provides various implementations:
All statement types share a common set of execution attributes, that can be set through either setters or a builder:
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).