Android 資料庫的事務

來源:互聯網
上載者:User

標籤:

什麼是資料庫的事務

事務(Transaction)是訪問並可能更新資料庫中各種資料項目的一個程式執行單元(unit)。事務通常由進階資料庫操縱語言或程式設計語言書寫的使用者程式的執行所引起,並用形如begin transaction和end transaction語句(或函數調用)來界定。事務由事務開始和事務結束之間執行的全體操作組成。

特性

事務是恢複和並發控制的基本單位。

事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。

原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。

一致性(consistency)。事務必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。

隔離性(isolation)。一個事務的執行不能被其他事務幹擾。即一個事務內部的操作及使用的資料對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。

持久性(durability)。指一個事務一旦提交,它對資料庫中資料的改變就應該是永久性的。接下來的其他動作或故障不應該對其有任何影響。

    db.beginTransaction();    try {        ...        db.setTransactionSuccessful();    } catch (Exception e) {        Toast.makeText(this, "產生異常,交易回復", 0).show();    } finally {        db.endTransaction();    }
1、修改資料庫

將之前建立的person.db資料庫添加一列account來記錄帳務

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        Log.i(TAG, "資料庫的版本發生變化了");        db.execSQL("alter table person add  account varchar(20)");    }

並修改PersonSQLiteOpenHelper方法中的版本號碼,將其加1

    public PersonSQLiteOpenHelper(Context context) {        // context 上下文        // person.db 資料庫檔案名稱        // factory 遊標工廠        // version 資料庫的版本號碼 從1開始        super(context, "person.db", null, 5);        // TODO Auto-generated constructor stub    }

接著單元測試運行TestPersonDB.java中的testCreateDB方法

2、資料庫事務操作

案例:
張三給王五匯款
1. 張三 account - 1000
2. 王五 account + 1000

    public void testTransaction() throws Exception {        PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext());        SQLiteDatabase db = helper.getReadableDatabase();        // 開始資料庫的事務        db.beginTransaction();        try {            db.execSQL("update person set account=account-1000 where name=?",                    new Object[] { "zhangsan" });                        int i = 2/0; //製造異常測試事務操作            db.execSQL("update person set account=account+1000 where name=?",                    new Object[] { "wangwu" });            // 標記資料庫事務執行成功            db.setTransactionSuccessful();        } catch (Exception e) {        } finally {            db.endTransaction();            db.close();        }    }

最後使用sqlite3查看資料庫person表中的資料,轉賬沒有成功,張三和王五的錢都沒有變化

Android 資料庫的事務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.