Batch statements
Use BatchStatement to execute a set of queries as an atomic operation (refer to Batching inserts, updates and deletes to understand how to use batching effectively):
PreparedStatement preparedInsertExpense =
session.prepare(
"INSERT INTO cyclist_expenses (cyclist_name, expense_id, amount, description, paid) "
+ "VALUES (:name, :id, :amount, :description, :paid)");
SimpleStatement simpleInsertBalance =
SimpleStatement.newInstance(
"INSERT INTO cyclist_expenses (cyclist_name, balance) VALUES (?, 0) IF NOT EXISTS",
"Vera ADRIAN");
BatchStatement batch =
BatchStatement.newInstance(
BatchType.LOGGED,
simpleInsertBalance,
preparedInsertExpense.bind("Vera ADRIAN", 1, 7.95f, "Breakfast", false));
session.execute(batch);
To create a new batch statement, use one of the static factory methods (as demonstrated above), or a builder:
BatchStatement batch =
BatchStatement.builder(BatchType.LOGGED)
.addStatement(simpleInsertBalance)
.addStatement(preparedInsertExpense.bind("Vera ADRIAN", 1, 7.95f, "Breakfast", false))
.build();
Keep in mind that batch statements are immutable, and every method returns a different instance:
// Won't work: the object is not modified in place:
batch.setConfigProfileName("oltp");
// Instead, reassign the statement every time:
batch = batch.setConfigProfileName("oltp");
As shown in the examples above, batches can contain any combination of simple statements and bound
statements. A given batch can contain at most 65536 statements. Past this limit, addition methods
throw an IllegalStateException
.
In addition, simple statements with named parameters are currently not supported in batches (this is
due to a protocol limitation that will be fixed in a future version). If you try
to execute such a batch, an IllegalArgumentException
is thrown.