public interface SqlUpdate
Provides a simple way to execute raw SQL insert update or delete statements without having to resort to JDBC.
Supports the use of positioned or named parameters and can automatically notify Ebean of the table modified so that Ebean can maintain its cache.
Note that setAutoTableMod(boolean)
and
Ebean#externalModification(String, boolean, boolean, boolean)} can be to
notify Ebean of external changes and enable Ebean to maintain it's "L2"
server cache.
// example that uses 'named' parameters
String s = "UPDATE f_topic set post_count = :count where id = :id";
SqlUpdate update = Ebean.createSqlUpdate(s);
update.setParameter("id", 1);
update.setParameter("count", 50);
int modifiedCount = update.execute();
String msg = "There were " + modifiedCount + " rows updated";
String sql = "insert into audit_log (id, description, modified_description) values (?,?,?)";
SqlUpdate insert = Ebean.createSqlUpdate(sql);
try (Transaction txn = Ebean.beginTransaction()) {
txn.setBatchMode(true);
insert.setNextParameter(10000);
insert.setNextParameter("hello");
insert.setNextParameter("rob");
insert.execute();
insert.setNextParameter(10001);
insert.setNextParameter("goodbye");
insert.setNextParameter("rob");
insert.execute();
insert.setNextParameter(10002);
insert.setNextParameter("chow");
insert.setNextParameter("bob");
insert.execute();
txn.commit();
}
An alternative to the batch mode on the transaction is to use addBatch() and executeBatch() like:
try (Transaction txn = Ebean.beginTransaction()) {
insert.setNextParameter(10000);
insert.setNextParameter("hello");
insert.setNextParameter("rob");
insert.addBatch();
insert.setNextParameter(10001);
insert.setNextParameter("goodbye");
insert.setNextParameter("rob");
insert.addBatch();
insert.setNextParameter(10002);
insert.setNextParameter("chow");
insert.setNextParameter("bob");
insert.addBatch();
int[] rows = insert.executeBatch();
txn.commit();
}
Update
,
SqlQuery
,
CallableSql
Modifier and Type | Method and Description |
---|---|
void |
addBatch()
Add the statement to batch processing to then later execute via executeBatch().
|
int |
execute()
Execute the update returning the number of rows modified.
|
int[] |
executeBatch()
Execute when addBatch() has been used to batch multiple bind executions.
|
Object |
executeGetKey()
Execute and return the generated key.
|
int |
executeNow()
Execute the statement now regardless of the JDBC batch mode of the transaction.
|
Object |
getGeneratedKey()
Return the generated key value.
|
String |
getGeneratedSql()
Return the generated sql that has named parameters converted to positioned parameters.
|
String |
getLabel()
Return the label that can be seen in the transaction logs.
|
String |
getSql()
Return the sql statement.
|
int |
getTimeout()
Return the timeout used to execute this statement.
|
boolean |
isAutoTableMod()
Return true if eBean should automatically deduce the table modification
information and process it.
|
SqlUpdate |
setAutoTableMod(boolean isAutoTableMod)
Set this to false if you don't want eBean to automatically deduce the table
modification information and process it.
|
SqlUpdate |
setGetGeneratedKeys(boolean getGeneratedKeys)
Set to true when we want to use getGeneratedKeys with this statement.
|
SqlUpdate |
setLabel(String label)
Set a descriptive text that can be put into the transaction log.
|
SqlUpdate |
setNextParameter(Object value)
Set the next positioned parameter.
|
SqlUpdate |
setNull(int position,
int jdbcType)
Set a null parameter via its index position.
|
SqlUpdate |
setNull(String name,
int jdbcType)
Set a named parameter that has a null value.
|
SqlUpdate |
setNullParameter(int position,
int jdbcType)
Set a null valued parameter using its index position.
|
SqlUpdate |
setNullParameter(String name,
int jdbcType)
Set a named parameter that has a null value.
|
SqlUpdate |
setParameter(int position,
Object value)
Set a parameter via its index position.
|
SqlUpdate |
setParameter(String name,
Object param)
Set a named parameter value.
|
SqlUpdate |
setParams(Object... values)
Set one of more positioned parameters.
|
SqlUpdate |
setTimeout(int secs)
Set the timeout in seconds.
|
int execute()
Note that if the transaction has batch mode on then this update will use JDBC batch and may not execute until later - at commit time or a transaction flush. In this case this method returns -1 indicating that the update has been batched for later execution.
After you have executed the SqlUpdate you can bind new variables using
setParameter(String, Object)
etc and then execute the SqlUpdate
again.
For JDBC batch processing refer to
Transaction.setBatchMode(boolean)
and
Transaction.setBatchSize(int)
.
Ebean.execute(SqlUpdate)
int executeNow()
int[] executeBatch()
void addBatch()
Object getGeneratedKey()
Object executeGetKey()
sqlUpdate.execute();
Object key = sqlUpdate.getGeneratedKey();
boolean isAutoTableMod()
If this is true then cache invalidation and text index management are aware of the modification.
SqlUpdate setAutoTableMod(boolean isAutoTableMod)
Set this to false if you don't want any cache invalidation or text index management to occur. You may do this when say you update only one column and you know that it is not important for cached objects or text indexes.
SqlUpdate setLabel(String label)
Useful when identifying the statement in the transaction log.
SqlUpdate setGetGeneratedKeys(boolean getGeneratedKeys)
String getGeneratedSql()
int getTimeout()
SqlUpdate setTimeout(int secs)
This will set the query timeout on the underlying PreparedStatement. If the timeout expires a SQLException will be throw and wrapped in a PersistenceException.
SqlUpdate setParams(Object... values)
This is a convenient alternative to multiple calls setParameter().
String sql = "insert into audit_log (id, name, version) values (?,?,?)";
Ebean.createSqlUpdate(sql)
.setParams(UUID.randomUUID(), "Hello", 1)
.executeNow();
// is the same as ...
Ebean.createSqlUpdate(sql)
.setParameter(1, UUID.randomUUID())
.setParameter(2, "Hello")
.setParameter(3, 1)
.executeNow();
SqlUpdate setNextParameter(Object value)
value
- The value to bindSqlUpdate setParameter(int position, Object value)
SqlUpdate setNullParameter(int position, int jdbcType)
SqlUpdate setParameter(String name, Object param)
SqlUpdate setNull(String name, int jdbcType)
setNullParameter(String, int)
.SqlUpdate setNullParameter(String name, int jdbcType)
Copyright © 2019. All rights reserved.