import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.support.DatabaseConnection;
public class TransactionManager {
private ConnectionSource connectionSource;
public TransactionManager(ConnectionSource connectionSource) {
this.connectionSource = connectionSource;
}
public <T> T execute(TransactionCallback<T> callback) throws SQLException {
DatabaseConnection connection = connectionSource.getReadWriteConnection();
try {
connection.setAutoCommit(false);
T result = callback.doInTransaction(connection);
connection.commit(null);
return result;
} catch (Exception e) {
connection.rollback(null);
throw new SQLException("Transaction failed", e);
} finally {
connection.setAutoCommit(true);
connectionSource.releaseConnection(connection);
}
}
}
TransactionManager transactionManager = new TransactionManager(connectionSource);
try {
transactionManager.execute(new TransactionCallback<Void>() {
@Override
public Void doInTransaction(DatabaseConnection connection) throws SQLException {
return null;
}
});
} catch (SQLException e) {
}
List<User> users = new ArrayList<>();
Dao<User, Integer> userDao = DaoManager.createDao(connectionSource, User.class);
userDao.setAutoCommit(false);
for (User user : users) {
userDao.create(user);
if (users.size() % 100 == 0) {
userDao.commit(null);
}
}
userDao.commit(null);
userDao.setAutoCommit(true);
List<User> users = new ArrayList<>();
Dao<User, Integer> userDao = DaoManager.createDao(connectionSource, User.class);
userDao.setAutoCommit(false);
for (User user : users) {
userDao.update(user);
if (users.size() % 100 == 0) {
userDao.commit(null);
}
}
userDao.commit(null);
userDao.setAutoCommit(true);
List<User> users = new ArrayList<>();
Dao<User, Integer> userDao = DaoManager.createDao(connectionSource, User.class);
userDao.setAutoCommit(false);
for (User user : users) {
userDao.delete(user);
if (users.size() % 100 == 0) {
userDao.commit(null);
}
}
userDao.commit(null);
userDao.setAutoCommit(true);