日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android-使用嵌入式SQLite

發(fā)布時(shí)間:2024/9/27 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android-使用嵌入式SQLite 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Android平臺上集成的一個(gè)嵌入式關(guān)系型數(shù)據(jù)庫,SQLite3支持?NULL,INTEGER,REAL(浮點(diǎn)數(shù)

字),TEXT(字符串文本)BLOB(二進(jìn)制對象)數(shù)據(jù)類型,雖然它支持的類型只有五種,但實(shí)際上

sqlite3也接受varchar(n),char(n),decimal(p,s)?等數(shù)據(jù)類型,只不過在運(yùn)算或保存時(shí)會轉(zhuǎn)

成對應(yīng)的五種數(shù)據(jù)類型.

SQLite最大的特點(diǎn)是你可以把各種類型的數(shù)據(jù)保存到任何字段中,而不用關(guān)心字段聲明的數(shù)據(jù)類型是

什么.?但定義為INTEGER?PRIMARY?KEY的字段只能存儲64位整數(shù),?當(dāng)向這種字段保存除整數(shù)以外

的數(shù)據(jù)時(shí),將會產(chǎn)生錯(cuò)誤.

另外,?SQLite在解析CREATE?TABLE語句時(shí),會忽略字段名后面的數(shù)據(jù)類型信息.

SQLite可以解析大部分標(biāo)準(zhǔn)SQL語句,:

查詢語句:select?*?from?..?where?group?by?..having?...?order?by?排序子句

SQLite分頁同mysql相同:

...?limit?5?offset?3?|?limit?3,5

首次使用數(shù)據(jù)庫需要?jiǎng)?chuàng)建表及初始化一些信息,升級時(shí)需要修改表信息,android提供了SQLiteOpenHelper完成此類功能

onCreate(SQLiteDatabase?db)方法用于首次使用時(shí)創(chuàng)建庫,onUpgrade(SQLiteDatabase?db,int?oldVersion,int?newVersion)方法檢測版本變化時(shí)更新庫

getWriteableDatabase()getReadableDatabase()方法獲取一個(gè)用于操作數(shù)據(jù)庫的SQLiteDatabase實(shí)例。

getWriteableDatabase()方法一讀寫方式打開數(shù)據(jù)庫,一旦數(shù)據(jù)庫的磁盤空間滿了,數(shù)據(jù)庫只能讀而不能寫。倘若使用getWriteableDatabase()打開數(shù)據(jù)庫就會出錯(cuò)。getReadableDatabase()方法以讀方式打開數(shù)據(jù)庫。

public?class?DatabaseHelper?extends?SQLiteOpenHelper?{

private?static?final?String?name?=?"itcast";//數(shù)據(jù)庫名稱

private?static?final?int?version?=?1;??????//數(shù)據(jù)庫版本

public?DatabaseHelper(Context?context){

Super(context,name,null,version);

}

public?void?onCreate(){

//drop?table?if?exists?customers

//create?table?if?not?exists?customers(...

db.execSQL("CREATE?TABLE?IF?NOT?EXISTS?person?(personid?integer? primary???????????????????????????key?autoincrement,?name?varchar(20),?age?INTEGER)");

}

public?void?onUpgrade(SQLiteDatabase?db,int?oldVersion,intnewVersion){

db.execSQL("??ALTER?TABLE?person?ADD?phone?VARCHAR(12)??NULL");

}

}

在實(shí)際項(xiàng)目開發(fā)中,當(dāng)數(shù)據(jù)庫表結(jié)構(gòu)發(fā)生更新時(shí),應(yīng)該避免用戶存放于數(shù)據(jù)庫中的數(shù)據(jù)丟失。

使用SQLiteDataBase數(shù)據(jù)庫

SQLiteDatabase?db?=?....;

db.execSQL("insert?into?person(name,age)?values(?,?)",new?Object[]{..});

db.close();

//查詢操作

Cursor?cursor?=?db.rawQuery("select?*?from?person",?null);

while(cursor.moveToNext){

int?personid?=?cursor.getInt(0);

String?name?=?cursor.getString(1);

int?age?=?cursor.getInt(2);

cursor.close();

Db.close();

}

cursor.close();

db.close();

SQLiteDatabase?db?=?databaseHelper.getWritableDatabase();

ContentValues?values?=?new?ContentValues();

Values.put("name","傳智播客");

.....

Long?rowid?=?db.insert("person",null,values);

//刪除

SQLiteDatabase?db?=?databaseHelper.getWritableDatabase();

db.delete("person","personid<?",new?String[]{"2"}">");

db.close();

//更新

SQLiteDatabase?db?=?databaseHelper.getWritableDatabase();

ContentValues?values?=?new?ContentValues();

//key為字段名,value為值

values.put("name","傳智播客");

db.update("person",values,"personid=?",new?String[]{"1"});

db.close();

注:第一次調(diào)用getWritableDatabase()getReadableDatabase()方法后,SQLiteOpenHelper

會緩存當(dāng)前的SQLiteDatabase實(shí)例,SQLiteDatabase實(shí)例正常情況下會維持?jǐn)?shù)據(jù)庫的打開狀態(tài),所以在你不需要SQLiteDatabase實(shí)例時(shí),請及時(shí)調(diào)用close()方法釋放資源,一旦SQLiteDatabase實(shí)例被緩存,多次調(diào)用getWritableDatabase()getReadableDatabase()方法得到的都是同一實(shí)例。

事務(wù)處理:

SQLiteDatabase?db?=?...;

db.beginTransaction();

Try{

db.execSQL(...)

db.execSQL(...);

//設(shè)置成功標(biāo)記

db.setTransactionSuccessful();

}catch(){

....

}?finally?{

db.endTransaction();//由事務(wù)的標(biāo)志決定是提交事務(wù),還是回滾事務(wù)。

}

db.close();

注意:創(chuàng)建表時(shí),只能用integer類型,不能用int作為主鍵,否則不支持autoincrement.

create?table?customers(id?integer?primary?key?autoincrement,name?text);

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Android-使用嵌入式SQLite的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。