最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android數(shù)據(jù)存儲(chǔ)之SQLite使用

 更新時(shí)間:2016年01月10日 16:41:54   投稿:mrr  
SQLite是D.Richard Hipp用C語言編寫的開源嵌入式數(shù)據(jù)庫引擎。它支持大多數(shù)的SQL92標(biāo)準(zhǔn),并且可以在所有主要的操作系統(tǒng)上運(yùn)行

SQLite是一款開源的、嵌入式關(guān)系型數(shù)據(jù)庫,第一個(gè)版本Alpha發(fā)布于2000年。SQLite在便攜性、易用性、緊湊性、高效性和可靠性方面有著突出的表現(xiàn)。

在Android中創(chuàng)建的SQLite數(shù)據(jù)庫存儲(chǔ)在:/data/data/<包名>/databases/目錄下。

主要特點(diǎn):

-輕量級(jí)

-獨(dú)立性,沒有不依賴,無需安裝

-跨平臺(tái),支持眾多操作系統(tǒng)

-支持高達(dá)2TB大小的數(shù)據(jù)庫

-每個(gè)數(shù)據(jù)庫以單個(gè)文件的形式存在

-以B-Tree的數(shù)據(jù)結(jié)構(gòu)形式存儲(chǔ)在硬盤

SQLite的數(shù)據(jù)類型:

SQLite支持NULL、INTEGER、REAL、TEXT和BLOB數(shù)據(jù)類型

分別代表:空值、整型值、浮點(diǎn)值、字符串值、二進(jìn)制對(duì)象。

動(dòng)態(tài)數(shù)據(jù)類型(弱引用):

當(dāng)某個(gè)值插入到數(shù)據(jù)庫中時(shí),SQLite將會(huì)檢測(cè)它的數(shù)據(jù)類型,如果該類型與關(guān)聯(lián)的列不匹配,SQLite則會(huì)嘗試將該值轉(zhuǎn)換成該列的類型,如果不能轉(zhuǎn)換,則該值將作為本身的類型存儲(chǔ)。

在Android中使用SQLite主要涉及兩個(gè)類:

SQLiteDatabase和SQLiteOpenHelper,下面對(duì)這兩個(gè)類進(jìn)行主要的分析。

SQLiteDatabase

這個(gè)類提供了一些管理SQLite數(shù)據(jù)庫的方法,比如創(chuàng)建、刪除、執(zhí)行SQL命令,和執(zhí)行其他常見的數(shù)據(jù)庫管理任務(wù)的方法。每個(gè)程序的數(shù)據(jù)庫名字是唯一的。

常用方法:

db.execSQL(String sql) //執(zhí)行任何的SQL語句

db.insert(String table,String nullColumnHack,ContentValues values) //插入記錄

db.delete(String table,String whereClause,String[] whereArgs)//刪除記錄

db.update(String table,ContentValues values,String whereClause,String[] whereArgs)//更新記錄

db.query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)//查詢記錄

db.rawQuery(String sql,String[] selectionArgs)//通過sql語句查詢記錄

下面是一個(gè)簡(jiǎn)單操作SQLite數(shù)據(jù)庫的示例:

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//每個(gè)程序都有自己的數(shù)據(jù)庫
//通過openOrCreateDatabase來打開或創(chuàng)建一個(gè)數(shù)據(jù)庫,返回SQLiteDatabase對(duì)象
/**
* openOrCreateDatabase(String name,int mode,SQLiteDatabase.CursorFactory factory)
* name: 數(shù)據(jù)庫名
* mode: 數(shù)據(jù)庫權(quán)限,MODE_PRIVATE為本應(yīng)用程序私有,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE分別為全局可讀和可寫。
* factory: 可以用來實(shí)例化一個(gè)cusor對(duì)象的工廠類
*/
SQLiteDatabase db = openOrCreateDatabase("user.db",MODE_PRIVATE,null);
//創(chuàng)建一個(gè)表
db.execSQL("create table if not exists userTb (" +
"_id integer primary key," +
"name text not null,age integer not null," +
"sex text not null)");
//向表中插入記錄
db.execSQL("insert into userTb (name,age,sex) values ('張三',18,'女')");
db.execSQL("insert into userTb (name,age,sex) values ('李四',19,'男')");
db.execSQL("insert into userTb (name,age,sex) values ('王五',20,'女')");
//Cursor為查詢結(jié)果對(duì)象,類似于JDBC中的ResultSet
Cursor queryResult = db.rawQuery("select * from userTb", null);
if (queryResult != null) {
while (queryResult.moveToNext()) {
Log.i("info", "id: " + queryResult.getInt(queryResult.getColumnIndex("_id"))
+ " 姓名: " + queryResult.getString(queryResult.getColumnIndex("name"))
+ " 年齡: " + queryResult.getInt(queryResult.getColumnIndex("age"))
+ " 性別: " + queryResult.getString(queryResult.getColumnIndex("sex")));
}
//關(guān)閉游標(biāo)對(duì)象
queryResult.close();
}
//關(guān)閉數(shù)據(jù)庫
db.close();
}
}

當(dāng)執(zhí)行完openOrCreateDatabase("user.db",MODE_PRIVATE,null)后,會(huì)在/data/data/<包名>/databases/目錄下創(chuàng)建一個(gè)數(shù)據(jù)庫文件,打開DDMS可以查看。也可以將其導(dǎo)出,使用navigate等工具打開查看里面的數(shù)據(jù)。

另外,上述示例對(duì)記錄的操作是使用execSQL()方法通過原生的SQL語句進(jìn)行的,當(dāng)然也可以使用上面介紹的SQLiteDatabase常用的方法來操作,如insert()、delete()、update()、query()等方法。但是需要注意的是,以插入記錄舉例,當(dāng)數(shù)據(jù)量不大時(shí),通過execSQL()使用SQL語句進(jìn)行插入與使用insert()方法插入記錄的效率是差不多的,但是如果數(shù)據(jù)量比較大,那么使用前者比使用后者的效率明顯高出很多。

SQLiteOpenHelper

這個(gè)類為SQLiteDatabase的幫助類,主要用于管理數(shù)據(jù)庫的創(chuàng)建與版本更新。SQLiteHelper是一個(gè)抽象類,一般通過創(chuàng)建一個(gè)繼承自它的子類并重寫onCreat()和onUpgrade()方法進(jìn)行使用。

-onCreat(SQLiteDatabase db) //首次創(chuàng)建數(shù)據(jù)庫時(shí)調(diào)用,一般用于建表等操作。

-onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)//當(dāng)升級(jí)數(shù)據(jù)庫版本時(shí)調(diào)用

下面是使用SQLiteOpenHelper的一個(gè)簡(jiǎn)單示例:

創(chuàng)建一個(gè)繼承自SQLiteOpenHelper的子類

public class SQLiteHelper extends SQLiteOpenHelper {
/**
* context:上下文對(duì)象
* name:數(shù)據(jù)庫名
*/
public SQLiteHelper(Context context, String name) {
super(context, name, null, 1);
}
//首次創(chuàng)建數(shù)據(jù)庫的時(shí)候調(diào)用,一般進(jìn)行建表或某些初始化的操作
@Override
public void onCreate(SQLiteDatabase db) {
//建表
db.execSQL("create table if not exists userTb (" +
"_id integer primary key," +
"name text not null,age integer not null," +
"sex text not null)");
}
//當(dāng)數(shù)據(jù)庫版本升級(jí)時(shí)自動(dòng)調(diào)用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

然后就可以通過SQLiteHelper的實(shí)例獲取一個(gè)SQLiteDatabase對(duì)象,進(jìn)而對(duì)數(shù)據(jù)庫進(jìn)行一系列的操作了。

public class MainActivity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//創(chuàng)建一個(gè)SQLiteHelper對(duì)象
SQLiteHelper helper = new SQLiteHelper(MainActivity2.this,"stu.db");
//使用getWritableDatabase()或getReadableDatabase()方法獲得SQLiteDatabase對(duì)象
SQLiteDatabase db = helper.getWritableDatabase();
//插入記錄
db.execSQL("insert into userTb (name,age,sex) values ('張三',18,'女')");
db.execSQL("insert into userTb (name,age,sex) values ('李四',19,'男')");
db.execSQL("insert into userTb (name,age,sex) values ('王五',20,'女')");
//獲取游標(biāo)對(duì)象
Cursor queryResult = db.rawQuery("select * from userTb", null);
if (queryResult != null) {
//打印所有記錄
while (queryResult.moveToNext()) {
Log.i("info", "id: " + queryResult.getInt(queryResult.getColumnIndex("_id"))
+ " 姓名: " + queryResult.getString(queryResult.getColumnIndex("name"))
+ " 年齡: " + queryResult.getInt(queryResult.getColumnIndex("age"))
+ " 性別: " + queryResult.getString(queryResult.getColumnIndex("sex")));
}
//關(guān)閉游標(biāo)對(duì)象
queryResult.close();
}
//關(guān)閉數(shù)據(jù)庫
db.close();
}
}

相關(guān)文章

  • Android自定義View驗(yàn)證碼輸入框

    Android自定義View驗(yàn)證碼輸入框

    這篇文章主要為大家詳細(xì)介紹了自定義View驗(yàn)證碼輸入框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 彈出一個(gè)帶確認(rèn)和取消的dialog實(shí)例

    彈出一個(gè)帶確認(rèn)和取消的dialog實(shí)例

    下面小編就為大家?guī)硪黄獜棾鲆粋€(gè)帶確認(rèn)和取消的dialog實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • Android實(shí)現(xiàn)拍照截取和相冊(cè)圖片截取

    Android實(shí)現(xiàn)拍照截取和相冊(cè)圖片截取

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)拍照截取和相冊(cè)獲取圖片截取,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Android仿淘口令復(fù)制彈出框功能(簡(jiǎn)答版)

    Android仿淘口令復(fù)制彈出框功能(簡(jiǎn)答版)

    這篇文章主要介紹了Android仿淘口令復(fù)制彈出框功能(簡(jiǎn)答版)的相關(guān)資料,在文章給大家提到了淘口令原理介紹,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11
  • Android給布局、控件加陰影效果的示例代碼

    Android給布局、控件加陰影效果的示例代碼

    本篇文章主要介紹了Android給布局、控件加陰影效果的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • Android Studio使用教程(三):常用快捷鍵

    Android Studio使用教程(三):常用快捷鍵

    這篇文章主要介紹了Android Studio使用教程(三):常用快捷鍵,本文還同時(shí)介紹了自動(dòng)導(dǎo)包設(shè)置,需要的朋友可以參考下
    2015-05-05
  • Flutter事件監(jiān)聽與EventBus事件的應(yīng)用詳解

    Flutter事件監(jiān)聽與EventBus事件的應(yīng)用詳解

    EventBus的核心是基于Streams。它允許偵聽器訂閱事件并允許發(fā)布者觸發(fā)事件,使得不同組件的數(shù)據(jù)不需要一層層傳遞,可以直接通過EventBus實(shí)現(xiàn)跨組件通訊
    2023-04-04
  • Android fragment實(shí)現(xiàn)多個(gè)頁面切換效果

    Android fragment實(shí)現(xiàn)多個(gè)頁面切換效果

    這篇文章主要為大家詳細(xì)介紹了fragment實(shí)現(xiàn)多個(gè)頁面切換效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Android實(shí)現(xiàn)左滑退出Activity的完美封裝

    Android實(shí)現(xiàn)左滑退出Activity的完美封裝

    這篇文章主要介紹了Android實(shí)現(xiàn)左滑退出Activity的完美封裝,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Android中的Service相關(guān)全面總結(jié)

    Android中的Service相關(guān)全面總結(jié)

    接下來將介紹Service的種類;Service與Thread的區(qū)別;Service的生命周期;startService 啟動(dòng)服務(wù);Local與Remote服務(wù)綁定等等,感興趣的朋友可以了解下
    2013-01-01

最新評(píng)論

琼结县| 左贡县| 丹棱县| 隆尧县| 尖扎县| 九龙坡区| 左云县| 清水县| 塔河县| 北川| 微山县| 巴塘县| 古交市| 新干县| 大渡口区| 沙洋县| 城市| 保德县| 盐池县| 安福县| 虹口区| 西丰县| 康乐县| 高州市| 荥阳市| 青龙| 桃园县| 开阳县| 锡林浩特市| 新巴尔虎左旗| 永宁县| 耒阳市| 湘乡市| 商丘市| 岳西县| 治县。| 上思县| 建阳市| 香港| 肇源县| 桦甸市|