[Sqlite]-->嵌入式資料庫事務理解以及執行個體操作,sqlite嵌入式資料庫
SQLite 事務(Transaction)
事務(Transaction)是一個對資料庫執行工作單元。事務(Transaction)是以邏輯順序完成的工作單位或序列,可以是由使用者手動操作完成,也可以是由某種資料庫程式自動完成。
事務(Transaction)是指一個或多個更改資料庫的擴充。例如,如果您正在建立一個記錄或者更新一個記錄或者從表中刪除一個記錄,那麼您正在該表上執行事務。重要的是要控制事務以確保資料的完整性和處理資料庫錯誤。
實際上,您可以把許多的 SQLite 查詢聯合成一組,把所有這些放在一起作為事務的一部分進行執行。
1,事務的屬性
事務(Transaction)具有以下四個標準屬性,通常根據首字母縮寫為 ACID:
· 原子性(Atomicity):確保工作單位內的所有操作都成功完成,否則,事務會在出現故障時終止,之前的操作也會復原到以前的狀態。
· 一致性(Consistency):確保資料庫在成功提交的事務上正確地改變狀態。
· 隔離性(Isolation):使事務操作相互獨立和透明。
· 持久性(Durability):確保已提交事務的結果或效果在系統發生故障的情況下仍然存在。
2,事務控制
使用下面的命令來控制事務:
· BEGIN TRANSACTION:開始交易處理。
· COMMIT:儲存更改,或者可以使用 END TRANSACTION 命令。
· ROLLBACK:復原所做的更改。
事務控制命令只與 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。他們不能在建立表或刪除表時使用,因為這些操作在資料庫中是自動認可的。
3,BEGIN TRANSACTION 命令
事務(Transaction)可以使用 BEGIN TRANSACTION 命令或簡單的 BEGIN 命令來啟動。此類事務通常會持續執行下去,直到遇到下一個 COMMIT 或 ROLLBACK 命令。不過在資料庫關閉或發生錯誤時,交易處理也會復原。以下是啟動一個事務的簡單文法:
BEGIN;
or
BEGIN TRANSACTION;
4,COMMIT 命令
COMMIT 命令是用於把事務調用的更改儲存到資料庫中的事務命令。
COMMIT 命令把自上次 COMMIT 或 ROLLBACK 命令以來的所有事務儲存到資料庫。
COMMIT 命令的文法如下:
COMMIT;
or
END TRANSACTION;
5,ROLLBACK 命令
ROLLBACK 命令是用於撤消尚未儲存到資料庫的事務的事務命令。
ROLLBACK 命令只能用於撤銷自上次發出 COMMIT 或 ROLLBACK 命令以來的事務。
ROLLBACK 命令的文法如下:
ROLLBACK;
6,執行個體操作
[root@localhost sqlite-autoconf-3080403]# sqlite3 tim.db
SQLite version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for usage hints.
sqlite> CREATE TABLE COMPANY(ID INT NOT NULL, NAME VARCHAR(20),AGE INT,ADDRESS VARCHAR(20),SALARY DECIMAL(7,2));
現在,讓我們開始一個事務,並從表中刪除 age = 25 的記錄,最後,我們使用 ROLLBACK 命令撤消所有的更改,先開啟事務,然後刪除AGE為25的記錄,查詢COMPANY表,會看到沒有這條記錄,如所示:
再ROLLBACK,再去查詢COMPANY表,會看到AGE為25的記錄被恢複。
現在開啟一個事務,刪除AGE為25的記錄,再執行COMMIT提交所以的更改,那麼就不會再看到已經刪除的記錄,如下所示:
再ROLLBACK,再去查詢COMPANY表,會看到AGE為25的記錄被恢複。
現在開啟一個事務,刪除AGE為25的記錄,再執行COMMIT提交所以的更改,那麼就不會再看到已經刪除的記錄,如下所示:
參考文章地址:http://www.w3cschool.cc/sqlite/sqlite-transaction.html
用Eclipse開發android,怎串連到資料庫,最好有詳細程式碼
Android 串連資料庫
Android採用關係型資料庫SQLite3,它是一個支援SQL輕量級的嵌入式資料庫,在嵌入式操作上有很廣泛的,WM採用的也是SQLite3
關於過於、原理方面的東西在這篇文章裡不會提到,但是如果你想能夠快速的學會操作SQLite3,那這就是你要找的文章!
首先,我們看一下api,所有資料庫相關的介面、類都在.database和android.database.sqlite兩個包下,雖然只有兩個包,但是如果你英文不好或是太懶的話也要迷茫一段時間,其實,我們真正用的到的沒有幾個!
1、SQLiteOpenHelper (android.database.sqlite.SQLiteOpenHelper)
這是一個抽象類別,關於抽象類別我們都知道,如果要使用它,一定是繼承它!
這個類的方法很少,有一個構造方法
SQLiteOpenHelper(android.content.Context context, java.lang.String name,android.database.sqlite.SQLiteDatabase.CursorFactory factory, int version);
參數不做過多的解釋,CursorFactory一般直接傳null就可以
public void onCreate(SQLiteDatabase db)
此方法在建立資料庫是被調用,所以,應該把建立表的操作放到這個方法裡面,一會兒在後面我們會再詳細的說如何建立表
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
從方法名上我們就能知道這個方法是執行更新的,沒錯,當version改變是系統會調用這個方法,所以在這個方法裡應該執行刪除現有表,然後手動調用onCreate的操作
SQLiteDatabase getReadableDatabase()
可讀的SQLiteDatabase對象
SQLiteDatabase getWritableDatabase()
擷取可寫的SQLiteDatabase對象
2、SQLiteDatabase(android.database.sqlite.SQLiteDatabase)
關於操作資料庫的工作(增、刪、查、改)都在這個類裡
execSQL(sql)
執行SQL語句,用這個方法+SQL語句可以非常方便的執行增、刪、查、改
除此之外,Android還提供了功過方法實現增、刪、查、改
long insert(TABLE_NAME, null, contentValues)添加記錄
int delete(TABLE_NAME, where, whereValue)刪除記錄
int update(TABLE_NAME, contentValues, where, whereValue) 更新記錄
Cursor query(TABLE_NAME, null, null, null, null, null, null) 查詢記錄
除此之外,還有很多方法,如:beginTransaction()開始事務、endTransaction()結束事務...有興趣的可以自己看api,這裡就不多贅述了
3、Cursor(android.database.Cursor)
遊標(介面),這個很熟悉了吧,Cursor裡的方法非常多,常用的有:
boolean moveToPos......餘下全文>>
C++ 使用 SQLite3 ,開啟指定資料庫,執行插入操作後會什會寫到磁碟?不是對記憶體進行操作?
sqlite一般是用在嵌入式環境裡的,嵌入式環境沒有很複雜的磁碟處理邏輯,一般直接寫入主存
所以在嵌入式環境下,sqlite得資料直接寫入主存(即它的“硬碟”)不會慢