Use BatchStatement to execute a set of queries as a single 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 = new SimpleStatement("INSERT INTO cyclist_expenses (cyclist_name, balance) VALUES (?, 0) IF NOT EXISTS", "Vera ADRIAN"); BatchStatement batch = new BatchStatement(BatchStatement.Type.UNLOGGED) .add(simpleInsertBalance) .add(preparedInsertExpense.bind("Vera ADRIAN", 1, 7.95f, "Breakfast", false)); session.execute(batch);
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
.
By default, batches are configured as LOGGED. This ensures that if any statement in the batch succeeds, all will eventually succeed. Ensuring all queries in a batch succeed has a performance cost. Consider using UNLOGGED as shown above if you do not need this capability.
Please note that the size of a batch is subject to the batch_size_fail_threshold configuration option on the server.
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.