標籤:
sqlite預設每條執行語句都是一個事務,因此增加事務除了會進行原子性的保護外,也可提升效能,減少磁碟操作。使用SQLite的beginTransaction()方法可以開啟一個事務,執行到endTransaction()方法是會檢查事務的標誌是否為成功,如果成功則提交事務,否則復原事務。
當應用程式需要提交事務,必須在程式到endTransaction()方法之前使用setTransactionSuccessfull()方法設定事務的標誌為成功。若果如果不調用setTransactionSuccessful()不設定事務標誌的話,預設復原。
程式執行個體如下:
SQLiteDatabase db = openOrCreateDatabase("demo.db", this.MODE_PRIVATE, null); db.execSQL("CREATE TABLE IF NOT EXISTS users (_id INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR, password VARCHAR)"); //開啟事務 db.beginTransaction(); try { db.execSQL("INSERT INTO users VALUES (NULL,‘fredric1‘,‘fredricpassword1‘)"); db.execSQL("INSERT INTO users VALUES (NULL,‘fredric2‘,‘fredricpassword2‘)"); db.execSQL("INSERT INTO users VALUES (NULL,‘fredric3‘,‘fredricpassword3‘)"); db.execSQL("INSERT INTO users VALUES (NULL,‘fredric4‘,‘fredricpassword4‘)"); //設定事務標誌為成功,當結束事務時就會提交事務 db.setTransactionSuccessful(); } finally { //結束事務 db.endTransaction(); Cursor cursor = db.rawQuery("SELECT * FROM users", null); while (cursor.moveToNext()) { Log.i(TAG_ACTIVITY, cursor.getString(cursor.getColumnIndex("username"))); Log.i(TAG_ACTIVITY, cursor.getString(cursor.getColumnIndex("password"))); } cursor.close(); } }
sqlite(2、事務)