执行事务,只有在特定的条件下才会设置为successful,否则就会自动的rollback
rollbak有两种情况,一种是执行失败了,另外一种是我们doIntransaction里面执行到某些情况的时候自己设置需要rollback
+++++++++++++++++++++++++++++++++++
事务,开始,做事,判,成功,结束
package com.example.kodulf.litepaldemo;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteTransactionListener;
import org.litepal.LitePal;
/** * Created by Kodulf on 2017/5/1. */
public class DatabaseTransaction {
public static synchronized void doTransaction(SQLiteTransactionListener sqLiteTransactionListener, DatabaseExecutor databaseExecutor)
{
//获取database
SQLiteDatabase database = LitePal.getDatabase();
//开始执行事务
database.beginTransactionWithListener(sqLiteTransactionListener);
try {
//do something
databaseExecutor.doInTransaction();
//判断如果是否需要rollback,
//当needRollback为false的时候,那么设置事务执行成功,只有这个条件的时候才将事务设置为成功 //否则不设置为成功,那么会自动的rollback
if(!databaseExecutor.needRollback())
database.setTransactionSuccessful();
}catch (Exception e){ e.printStackTrace(); }finally { database.endTransaction(); } } public interface DatabaseExecutor { /** * 可以在这里设置是否需要rollback * @return */ boolean needRollback(); /** * 需要在事务中执行的 */ void doInTransaction(); } } 调用的地方:such as: public void add(View view) { DatabaseTransaction.doTransaction(new SQLiteTransactionListener() { @Override public void onBegin() { Log.d("kodulf", "tranaction onBegin"); } @Override public void onCommit() { Log.d("kodulf", "tranaction onCommit"); } @Override public void onRollback() { Log.d("kodulf", "tranaction on Roll back"); } }, new DatabaseTransaction.DatabaseExecutor() { boolean ret = false; @Override public boolean needRollback() { return ret; } @Override public void doInTransaction() { if(num%3==0){ ret = true; } } }); }