Sqlite3筆記

Sqlite2特性:
1.輕量級
2.獨立性
3.隔離性
4.跨平臺
5.多語言接口
6.安全性


SQLite的主要操作包括:創建數據庫、打開數據庫、創建表、添加、刪除、修改、查詢數據等
1、創建和打開數據庫
使用openOrCreateDatebase來實現,如果數據庫存在,則打開數據庫、如果不存在,則創建一個新的數據庫
Eg:mSQLiteDatabase =  this.openOrCreate("SQLiteDatabaseName");
2、創建表
創建表是通過execSQL方法來執行一條SQL語句。
Eg:String CREATE_TABLE = "create table tableName(_id INTEGER PRIMARY KEY,num INTEGER,data TEXT)";
mSQLiteDatabase.execSQL(CREATE_TABLE);
3、添加數據
使用insert方法進行操作,但是首先需要將參數打包成一個ContentValues,ContentValues是一個Map,其Key鍵是字段名稱,Value值是字段的值。
Eg:
ContentValues cv = new ContentValues();
cv.put("num",1);
cv.put("data","測試數據");
mSQLiteDatabase.insert(TABLE_NAME,null,cv)
同樣也可以使用SQL語句執行
String INSERT_SQL="insert into tableName (_id,num,data) values(1,1,'測試數據')";
mSQLiteDatabase.execSQL(INSERT_SQL);
4.修改表中的數據
使用update()方法
Eg:修改值爲0的數據
ContentValues cv = new ContentValues();
cv.put(num,3);
cv.put(data,"修改測試數據");
mSQLiteDatabase.update("tableName",cv,"num" + "=" + Integer.toString(0),null);
同樣可以通過execSQL方法執行。

5.刪除數據
使用delete()方法
Eg:刪除_id爲1的字段
mSQLiteDatabase.delete("tableName","where _id = 0 ",null);
同時也可以使用execSQL()方法達到效果
String DELETE_SQL = "delete from tableName where _id = 0";
mSQLiteDatabase.execSQL(DELETE_SQL);
6.關閉數據庫
mSQLiteDatabase.close();
7.刪除指定的表
mSQLiteDatabase.execSQL("drop table tableName");
8.刪除數據庫
this.deleteDatabase("databaseName");
9.查詢表中的數據
查詢表中的數據是通過Cursor類來實現的。當我們使用mSQLiteDatabase.query()方法時,會得到一個Cursor對象,此對象指向的就是每一條數據。其常見方法如下
方法名 說明
move 以當前位置爲參考,將cursor移動到指定的位置,成功返回true,失敗返回false
moveToPosition 將Cursor移動到指定位置,成功返回true,失敗返回false
moveToNext 將Cursor向前移動一個位置,成功返回true,失敗返回false
moveToLast 將Cursor向後移動一個位置,成功返回true,失敗返回false
moveToFirst 將Cursor移動到第一行,成功返回true,失敗返回false
isBeforeFirst 返回Cursor是否指向第一項數據之前
isAfterLast 返回Cursor是否指向最後一項數據之後
isClosed 返回Cursor是否關閉
isFirst 返回Cursor是否指向第一項數據
isLast 返回Cursor是否指向最後一項數據
isNull 返回執行位置的值是否爲空
getCount 返回總的數據項數
getInt 返回當前行中指定索引的數據


Eg:
Cursor cursor = mSQLiteDatabase.rawQuery("select * from tableName",null);
if(Cursor != null){
if(cursor.moveToFirst()){
do{
//獲取num列的索引值
int numColumn = cursor.getColumnIndex("num");
//獲取num值
int num = cursor.getInt(numColumn);
}
}
}


SQLiteOpenHelper的應用
在實際開發中,我們一般會封裝一個繼承自SQLiteOpenHelper類的數據庫操作類。SQLiteOpenHelper的構造方法中分別傳入Context、數據庫名稱、CursorFactory(一般傳入爲null,否則爲默認數據庫)、數據庫版本號。在SQLiteOpenHelper中,首先會執行onCreate方法,但是真正創建數據庫是在調用getWritableDatabase或者getReadableDatabase方法時才真正去創建數據庫,並且返回一個SQLiteDatabase對象。


數據共享(Content Provider)
其作用是使各個應用之間實現數據共享。Content Provider是一個特殊的存儲數據的類型,它提供了一套標準的接口用於獲取、操作數據。
1.ContentResolver
所有的Content Provider都會實現一些共同的接口。其包括數據的查詢、添加、更改和刪除。可以通過getContentRosolver()方法獲取一個ContentResolver對象,然後就可以用ContentResolver提供的方法來操作Content Provider了。
ContentResolver cr = getContentResolver();
一般情況下,Content Provider只存在一個實例,這個實例可以與在不同的進程或者程序中的多個ContentResolver對象進行通信。Content Provider把它的數據作爲數據庫模型上的單一數據表提供出來。每一行是一條數據,每一列是一個特定的類型的值。
2.URI
每個Content Provider都會對外提供一個公共的URI,如果應用程序有數據需要共享時,就需要這個URI,然後其他應用程序就可以通過Content Provider傳入這個URI來對數據進行操作。URI由三部分組成:"content://"、數據的路徑、標識ID(可選)
Eg:content://contents/people/5(聯繫人信息中ID爲5的聯繫人記錄)
3.查詢數據
要查詢Content Provider的內容,可以使用ContentResolver.query()方法或Activity.managedQuery()方法,他們都返回一個Cursor對象,不同的是使用managedQuery包含了Cursor的生命週期,當Activity被暫停之後,如果要使用Cursor就通過Activity.startManagingCursor()方法來重新啓動。
Eg:
1.Cursor cur = managedQueryCursor(person,null,null,null);
2. String projection = new String[]{People._id , People._count,People.NAME,People.NUMBER};
Uri contacts = People.CONTENT_URI;
Cursor managedCursor = managedQuery(contents,projection/** 返回指定的列 */,null(返回所有行的數據),null(可選參數),People.NAME+"ASC"(按照名字的升序排列));
讀取查詢的數據由Cursor對象的方法來操作,Cursor對象用於在結果集合中向前或者向後列舉數據,Cursor對象只能用於讀取數據。增加、修改和刪除數據必須使用ContentResovler對象。
Eg:
private void getColumnData(){
if(cursor.moveToFirst()){
String name;
String phoneNum;
int nameColumn = cursor.getColumnIndex(People.NAME);
int phoneNumColumn = cursor.getColumnIndex(People.NUMBER);
do{
name = cursor.getString(nameColumn);
phoneNum = cursor.getString(phoneNumColumn);
}
}
}
4.修改數據
可以使用ContentResolver.update()方法來更新數據。
Eg:
private void uodateRecord(int id,int num){
Uri uri = ContentUris.withAppendedId(People.CONTENT_URI,id);
ContentValue cv = new ContentValue();
value.put(People.NUMBER,num);
getContentResolver.update(uri,cv,null,null);
}
5.添加數據
可以使用ContentResolver.insert()方法來增加一條數據。
Eg:ContentValue cv = newContentValue();
   cv.put(People.NAME,"NAME");
   cv.put(People.STARRED,1);
   Uri uri = getContentResolver().insert(People.CONTENT_URI,cv);
6.刪除數據
調用ContentResolver.delete()方法即可
發佈了41 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章