新聞中心
Android平臺(tái)作為如今移動(dòng)設(shè)備應(yīng)用開發(fā)最重要的平臺(tái)之一,其中的數(shù)據(jù)庫應(yīng)用也變得日益重要。對于那些對于數(shù)據(jù)庫的存取處理不是很理解的開發(fā)人員來說,要在Android應(yīng)用中實(shí)現(xiàn)數(shù)據(jù)存取也可稱得上是一場災(zāi)難。不同版本的Android平臺(tái)都有著不同的數(shù)據(jù)庫API,還有著不少的坑點(diǎn)。本文將通過介紹在Android平臺(tái)下的SQLite數(shù)據(jù)庫的使用方法、效率的優(yōu)化策略以及一些更佳實(shí)踐,以幫助開發(fā)人員更好地在Android平臺(tái)下實(shí)現(xiàn)數(shù)據(jù)庫的存取與處理。

創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、安定網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、成都商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為安定等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
一、Android平臺(tái)下的SQLite數(shù)據(jù)庫的使用方法
在Android平臺(tái)下,目前內(nèi)嵌的數(shù)據(jù)庫系統(tǒng)為SQLite。SQLite是一個(gè)輕量級(jí)的關(guān)系型數(shù)據(jù)庫,是Android系統(tǒng)存儲(chǔ)數(shù)據(jù)的標(biāo)配,其具有占用資源低、無需服務(wù)器、靈活處理數(shù)據(jù)等特點(diǎn)。雖然SQLite作為一個(gè)關(guān)系型數(shù)據(jù)庫,但其使用不需要編寫一百行以上的代碼,而且使用不受語言限制,不管是Java、C++、C#還是其它編程語言都可以輕松使用上。
以下是一個(gè)Android應(yīng)用中SQLite數(shù)據(jù)庫實(shí)現(xiàn)相關(guān)的基本步驟:
1.定義數(shù)據(jù)庫類。SQLiteOpenHelper類是SQLite的幫助工具。定義數(shù)據(jù)庫類需要繼承SQLiteOpenHelper。
2.定義數(shù)據(jù)表,包括表名、列名和數(shù)據(jù)類型等。
3.實(shí)現(xiàn)數(shù)據(jù)庫的打開、關(guān)閉功能,以及基本的增、刪、改、查功能。
下面以一個(gè)簡單的例子為例來講解SQLite數(shù)據(jù)的存儲(chǔ):
1.定義數(shù)據(jù)庫類
SQLiteOpenHelper是Android SDK中以SQLite為基礎(chǔ)實(shí)現(xiàn)的數(shù)據(jù)存儲(chǔ)輔助類,它封裝了SQLiteDatabase對象的創(chuàng)建與升級(jí)之間的操作。SQLiteOpenHelper的使用需要繼承該類,然后用super()方法調(diào)用基類構(gòu)造器以創(chuàng)建一個(gè)可用的SQLiteOpenHelper對象。
public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_BOOK = “create table Book(“
+ “id integer primary key autoincrement,”
+ “cursor text,”
+ “price real,”
+ “pages integer,”
+ “name text)”;
// 構(gòu)造函數(shù),傳入context、數(shù)據(jù)庫名、游標(biāo)工廠、版本號(hào)。
public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
// 創(chuàng)建數(shù)據(jù)庫回調(diào)事件
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
}
// 升級(jí)數(shù)據(jù)庫回調(diào)事件
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
2.定義數(shù)據(jù)表
數(shù)據(jù)表是用來存放與應(yīng)用相關(guān)的數(shù)據(jù)的,區(qū)別于SQL語法中的數(shù)據(jù)表,SQLite數(shù)據(jù)表中是沒有指定數(shù)據(jù)類型的,它默認(rèn)會(huì)自動(dòng)檢測數(shù)據(jù)類型,而且該性質(zhì)使得開發(fā)人員后期內(nèi)容更新時(shí)可以無需修改數(shù)據(jù)庫中的存儲(chǔ)結(jié)構(gòu)。
CREATE_BOOK的建表語句如下:
public static final String CREATE_BOOK = “create table Book(“
+ “id integer primary key autoincrement,”
+ “cursor text,” // 書名
+ “price real,” // 價(jià)格
+ “pages integer,” // 頁數(shù)
+ “name text)”;
3.實(shí)現(xiàn)數(shù)據(jù)庫的打開、關(guān)閉功能,以及基本的增、刪、改、查功能。
插入數(shù)據(jù)的實(shí)現(xiàn):
// 向目標(biāo)表插入數(shù)據(jù)
public void insert() {
SQLiteDatabase db = mMyDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
// 開始組裝之一條數(shù)據(jù)
values.put(“name”, “之一行代碼”);
values.put(“cursor”, “郭霖”);
values.put(“pages”, 500);
values.put(“price”, 90.8);
db.insert(“Book”, null, values); // 插入數(shù)據(jù)
// 開始組裝第二條數(shù)據(jù)
values.clear();
values.put(“name”, “安卓群英傳”);
values.put(“cursor”, “任玉剛”);
values.put(“pages”, 600);
values.put(“price”, 100);
db.insert(“Book”, null, values);// 插入數(shù)據(jù)
// 關(guān)閉數(shù)據(jù)庫
db.close();
}
刪除數(shù)據(jù):
// 刪除一定價(jià)格以上的數(shù)據(jù)
public void delete() {
SQLiteDatabase db = mMyDatabaseHelper.getWritableDatabase();
db.delete(“Book”, “price > ?”, new String[]{“100”});
db.close();
}
更新數(shù)據(jù):
// 更新書名為”one day”的數(shù)據(jù)
public void update() {
SQLiteDatabase db = mMyDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(“name”, “one day”);
db.update(“Book”, values, “name = ?”, new String[]{“之一行代碼”});
db.close();
}
查詢數(shù)據(jù):
// 查詢所有數(shù)據(jù)
public void query() {
SQLiteDatabase db = mMyDatabaseHelper.getWritableDatabase();
// 查詢Book表的所有數(shù)據(jù)
Cursor cursor = db.query(“Book”, null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
// 遍歷Cursor對象,取出數(shù)據(jù)并打印
String name = cursor.getString(cursor.getColumnIndex(“name”));
String author = cursor.getString(cursor.getColumnIndex(“cursor”));
int pages = cursor.getInt(cursor.getColumnIndex(“pages”));
double price = cursor.getDouble(cursor.getColumnIndex(“price”));
Log.d(“MnActivity”, “book name is ” + name + ” author is ” + author
+ ” pages is ” + pages + ” price is ” + price);
} while (cursor.moveToNext());
}
cursor.close();
}
二、效率的優(yōu)化策略
在數(shù)據(jù)庫操作時(shí),我們不僅需要保證數(shù)據(jù)的準(zhǔn)確性、完整性,還需要考慮到效率問題。如何快速高效地操作數(shù)據(jù)庫呢?以下是幾個(gè)優(yōu)化策略:
1.合理的SQL語句設(shè)計(jì)。SQL語句的設(shè)計(jì)是否正確,直接影響該操作的效率的高低。因此我們需要針對不同的數(shù)據(jù)庫操作,設(shè)計(jì)出恰當(dāng)?shù)腟QL語句,以減少無用的數(shù)據(jù)查詢和降低I/O操作負(fù)荷。
2.使用事務(wù)。在執(zhí)行多個(gè)Sqlite數(shù)據(jù)操作語句時(shí),可以通過開啟事務(wù)來減少磁盤IO操作、提升操作性能。事務(wù)操作是在數(shù)據(jù)庫存儲(chǔ)系統(tǒng)中大量操作數(shù)據(jù)的優(yōu)秀例子,它對于大數(shù)據(jù)量的數(shù)據(jù)操作有著很大的作用。開發(fā)者在進(jìn)行大數(shù)據(jù)量的操作時(shí),可以使用事務(wù),將數(shù)據(jù)起來,然后一次提交,這樣可以有效的運(yùn)用資源,提高數(shù)據(jù)操作效率。
3.對數(shù)據(jù)量較大的字段建立索引。索引是一種特定順序排列的數(shù)據(jù)結(jié)構(gòu),它可以快速定位到表中的特定行。對數(shù)據(jù)量比較大的字段建立索引可以極大的提高數(shù)據(jù)庫的查詢速度。但是建索引也會(huì)帶來一定的資源和性能損耗,索引會(huì)占用一定的空間,并且當(dāng)數(shù)據(jù)量增加時(shí),更新查詢的代價(jià)也會(huì)變得越來越大。
三、更佳實(shí)踐
針對Android平臺(tái)下的數(shù)據(jù)庫操作更佳實(shí)踐如下:
1.不在UI線程中進(jìn)行數(shù)據(jù)庫操作。所有的數(shù)據(jù)庫操作都需要在子線程中進(jìn)行。因?yàn)槿绻赨I線程中進(jìn)行,這樣會(huì)導(dǎo)致主線程被堵塞,從而造成UI卡頓,影響用戶的交互體驗(yàn)。
2.不要忘記關(guān)閉數(shù)據(jù)庫。在操作完成后及時(shí)關(guān)閉數(shù)據(jù)庫,這樣可以釋放相關(guān)資源,避免出現(xiàn)數(shù)據(jù)泄漏。
3.關(guān)于多線程操作。在多線程操作時(shí),每個(gè)線程都需要?jiǎng)?chuàng)建自己的單例SQLiteOpenHelper實(shí)例對象,這樣才能保證在多線程環(huán)境下數(shù)據(jù)庫的操作是安全的。如果多個(gè)線程在同一實(shí)例中操作數(shù)據(jù)庫,會(huì)在并發(fā)時(shí)發(fā)生錯(cuò)誤。
通過本文的介紹,相信大家能夠更好的了解到在Android平臺(tái)下的SQLite數(shù)據(jù)庫操作的方法與技巧。在日常的應(yīng)用開發(fā)中,良好的數(shù)據(jù)庫操作習(xí)慣應(yīng)該是我們很好的應(yīng)用之一。當(dāng)要處理大量的數(shù)據(jù)時(shí),我們需要注意的是優(yōu)化策略,使用一些高效的語句,避免頻繁出現(xiàn)sql查詢動(dòng)作,并開啟事務(wù)操作加速數(shù)據(jù)庫數(shù)據(jù)插入的動(dòng)作。最后嚴(yán)格按照更佳實(shí)踐操作,可以讓我們的程序更加健壯,性能得到更好的提升。
相關(guān)問題拓展閱讀:
- android 數(shù)據(jù)庫存什么數(shù)據(jù)
android 數(shù)據(jù)庫存什么數(shù)據(jù)
輕量數(shù)據(jù)!輕量數(shù)據(jù)!輕量數(shù)據(jù)!切記
android數(shù)據(jù)庫是一個(gè)輕量級(jí)數(shù)據(jù)庫sqlite。我以前測試過,數(shù)據(jù)量大扮洞于3000條的時(shí)候查詢會(huì)有明顯延遲,甚至?xí)罎ⅰ?/p>
所以,一般會(huì)存儲(chǔ)類好型似于用友缺猜戶信息,簡單的log,版本信息。你可以用電腦連接android手機(jī),然后用sqlite命令行工具訪問手機(jī)里的數(shù)據(jù)庫,看看主流app都存了什么。
android開發(fā)中sqlite3支持的數(shù)據(jù)類型:
NULL、INTEGER、REAL、TEXT、BLOB
但是,sqlite3也支持如下的數(shù)據(jù)類型
allint位整數(shù)
integer2位整數(shù)
decimal(p,s) p是精確值,s是小數(shù)位數(shù)
float 32位實(shí)數(shù)
double4位實(shí)數(shù)
char(n)n長度字符串,不能超過254
varchar(n)長度不固定更大字符汪租含串長度為n,n不超過4000
graphic(n)和 char(n) 一樣,但是單位是兩個(gè)字符double-bytes,n不超過127(中文字)
vargraphic(n) 可變長型數(shù)度且更大長困笑度為n
date 包含了年份、月份、日期
time 包含了小時(shí)、分鐘、秒
timestamp包含了年、月、日、時(shí)、分、秒、千分之一秒
android 下數(shù)據(jù)庫的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于android 下數(shù)據(jù)庫,Android數(shù)據(jù)庫:存取數(shù)據(jù)的終極指南,android 數(shù)據(jù)庫存什么數(shù)據(jù)的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
本文名稱:Android數(shù)據(jù)庫:存取數(shù)據(jù)的終極指南(android下數(shù)據(jù)庫)
當(dāng)前路徑:http://www.5511xx.com/article/dphggci.html


咨詢
建站咨詢
