国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Database (數(shù)據(jù)庫(kù))

whjin / 381人閱讀

摘要:和用來向表中插入新的行數(shù)據(jù),每個(gè)對(duì)象都將一個(gè)行記錄對(duì)應(yīng)。數(shù)據(jù)庫(kù)查詢結(jié)果作為對(duì)象返回。會(huì)緩存數(shù)據(jù)庫(kù)實(shí)例。如果數(shù)據(jù)庫(kù)不存在,就會(huì)執(zhí)行方法,如果數(shù)據(jù)庫(kù)版本發(fā)生變化則會(huì)執(zhí)行方法。文件通常是不存在數(shù)據(jù)庫(kù)中的,應(yīng)該存放文件的路徑地址。

  

SQLite 數(shù)據(jù)庫(kù)文件存儲(chǔ)在設(shè)備上的 /data/data/package_name/databases 文件夾中,所有的數(shù)據(jù)庫(kù)都市私有的,只能被創(chuàng)建者訪問。
使用數(shù)據(jù)庫(kù)時(shí)最好的做法是將底層數(shù)據(jù)庫(kù)封裝起來,只公開與該數(shù)據(jù)庫(kù)進(jìn)行交互時(shí)必須使用的公有方法和常量,這一般會(huì)用到所謂的輔助類。

ContentValue 和 Cursor

Content Value 用來向表中插入新的行數(shù)據(jù),每個(gè) ContentValues 對(duì)象都將一個(gè)行記錄對(duì)應(yīng)。
數(shù)據(jù)庫(kù)查詢結(jié)果作為 Cursor 對(duì)象返回。Cursor 是底層數(shù)據(jù)中的結(jié)果集的指針,它沒有提取和返回結(jié)果值的副本。
Cursor 常用的幾個(gè)方法:

moveToFirst

moveToNext

moveToPrevious

moveToPosition

getCount

getColumnIndexOrThrow

getColumnName

getColumnNames

getPosition

Android 提供了一種方便的機(jī)制,可以確保異步執(zhí)行查詢,API Level 11 引入了 CursorLoader 類和相關(guān)的 Loader Manager,現(xiàn)在他們已經(jīng)成為了支持庫(kù)的一部分,從而允許你在支持早期的 Android 版本的同時(shí)使用這些功能。


SQLiteOpenHelper

是一個(gè)抽象類,用來實(shí)現(xiàn)創(chuàng)建、打開和升級(jí)數(shù)據(jù)庫(kù)。會(huì)緩存數(shù)據(jù)庫(kù)實(shí)例。通過 onCreate 和 onUpgrade 方法來分別處理創(chuàng)建新數(shù)據(jù)庫(kù)和升級(jí)新版本數(shù)據(jù)庫(kù)。

等到需要數(shù)據(jù)庫(kù)時(shí)在創(chuàng)建和打開這些數(shù)據(jù)庫(kù)是一種很好的做法,SQLiteOpenHelper 會(huì)再打開數(shù)據(jù)庫(kù)后緩存他的實(shí)例,一般情況下無(wú)需手動(dòng)關(guān)閉數(shù)據(jù)庫(kù)。

  

數(shù)據(jù)庫(kù)操作(特別是打開或創(chuàng)建數(shù)據(jù)庫(kù))需要很長(zhǎng)時(shí)間才能完成,為了確保不影響用戶操作體驗(yàn),應(yīng)該使所有數(shù)據(jù)庫(kù)事物異步執(zhí)行。

通常可以使用 SQLiteOpenHelper 的 getWritableDatabase 或者 getReadableDatabase 來分別打開一個(gè)可寫或只讀的實(shí)例。如果數(shù)據(jù)庫(kù)不存在,就會(huì)執(zhí)行 onCreate 方法,如果數(shù)據(jù)庫(kù)版本發(fā)生變化則會(huì)執(zhí)行 onUpgrade 方法。

也可以不使用 SQLiteOpenHelper 打開數(shù)據(jù)庫(kù)實(shí)例,可以通過 Context 對(duì)象的 openOrCreateDatabase 方法

public class HoardDBOPenHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "myDatabase.db";
    private static final String DATABASE_TABLE = "GoldHoards";
    private static final int DATABASE_VERSION = 1;

    public static final String KEY_ID = "_id";

    public static final String KEY_GOLD_HOARD_NAME_COLUMN = "GOLD_HOARD_NAME_COLUMN";
    public static final String KEY_GOLD_HOARD_ACCESSIBLE_COLUMN = "OLD_HOARD_ACCESSIBLE_COLUMN";
    public static final String KEY_GOLD_HOARDED_COLUMN = "GOLD_HOARDED_COLUMN";

    private static final String DATABASE_CREATE = "create table "
        + DATABASE_NAME + "(" + KEY_ID
        + "integer primary key autoincrement, "
        + KEY_GOLD_HOARD_NAME_COLUMN + " text not null, "
        + KEY_GOLD_HOARDED_COLUMN + " float, "
        + KEY_GOLD_HOARD_ACCESSIBLE_COLUMN + " integer);";

    public HoardDBOPenHelper(Context context, String name,
        CursorFactory factory, int version,
        DatabaseErrorHandler errorHandler) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w("TaskDBAdapter", "Upgrading from version " + oldVersion + " to "
        + newVersion + ", which will destroy all old data");

        db.execSQL("DROP TABLE IF IT EXISTS " + DATABASE_CREATE);

        onCreate(db);
    }
}
  

數(shù)據(jù)庫(kù)設(shè)計(jì)注意事項(xiàng)

每個(gè)表都增加一個(gè) _id 作為每一行的索引字段。如果使用 Content Provider 就必須要有一個(gè) 唯一的 ID 字段。

文件通常是不存在數(shù)據(jù)庫(kù)中的,應(yīng)該存放文件的路徑地址。


SQLiteDatabase

數(shù)據(jù)庫(kù)操作實(shí)例,提供了操作數(shù)據(jù)庫(kù)的一切動(dòng)作,包含增刪改查、執(zhí)行 SQL 語(yǔ)句。


數(shù)據(jù)庫(kù)查詢

每個(gè)數(shù)據(jù)庫(kù)查詢都會(huì)作為一個(gè) Cursor 返回,這就使得 Android 可以按需檢索和釋放行和列的值,從而更加高效的管理資源。

要對(duì)一個(gè)數(shù)據(jù)庫(kù)對(duì)象進(jìn)行查詢,需要使用 query 方法,并傳入以下的一些參數(shù):

一個(gè)可選的布爾值,用來指定結(jié)果集是否只包含唯一的值。

要查詢的表的名稱。

一個(gè)字符串?dāng)?shù)組形式的投影,列出了包含在結(jié)果集中的列。

一條 where 子句,定義了要返回的行??梢栽谄渲邪??” 通配符,它將會(huì)被通過選擇參數(shù)傳入的值替換。

一個(gè)選擇參數(shù)字符串的數(shù)組,它將會(huì)替換 where 子句中的“?”,通配符。

一條 group by 子句,用來定義返回的行的分組方式。

一條 having 子句,如果指定了一條 group by 子句,則蓋子句會(huì)定義要包含那些行組。

一個(gè)字符串,用來描述返回的行的順序。

一個(gè)字符串,用來定義結(jié)果集中的最大行數(shù)。

public void queryHoard() {
    String[] result_cloums = new String[] { KEY_ID,
        KEY_GOLD_HOARD_ACCESSIBLE_COLUMN, KEY_GOLD_HOARDED_COLUMN };

    // 指定用于限制結(jié)果的 where 子句
    String where = KEY_GOLD_HOARD_ACCESSIBLE_COLUMN + "=" + 1;

    // 根據(jù)需要把以下語(yǔ)句替換為有效的SQL語(yǔ)句
    String[] whereArgs = null;
    String groupBy = null;
    String having = null;
    String order = null;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.query(DATABASE_NAME, result_cloums, where,
        whereArgs, groupBy, having, order);
}


從 Cursor 中提取值

要 從 Cursor 中提取值,首先要使用前面描述過的 moveTo 系列的方法將游標(biāo)放到結(jié)果 Cursor 的正確行中,然后使用類型安全的 get 方法來返回存儲(chǔ)在指定列的當(dāng)前行中的值。為了找到特定列在游標(biāo)中的索引,需要使用 getColumnIndex 和 getColumnIndexOrThrow 方法。
當(dāng)你認(rèn)為列在所有情況下都存在時(shí),使用 getColumnIndexOrThrow 是一種不錯(cuò)的辦法,當(dāng)列有可能不存在游標(biāo)中時(shí),使用 getColumnIndex 可以檢查結(jié)果是否為 -1 比捕獲異常更加高效。

int columnIndex = cursor.getColumnIndex(KEY_GOLD_HOARDED_COLUMN);
if (columnIndex > -1) {
    String columnValue = cursor.getColumnName(columnIndex);
    // 存在時(shí)
} else {
    // 不存在
}

從 Cursor 中獲取值:

float totalHoard = 0f;
float averageHoard = 0f;

// 找出所用列的索引
int GOLD_HOARDED_COLUMN_INDEX = cursor.getColumnIndexOrThrow(KEY_GOLD_HOARD_NAME_COLUMN);

// 遍歷游標(biāo)
while (cursor.moveToNext()) {
    float hoard = cursor.getFloat(GOLD_HOARDED_COLUMN_INDEX);
    totalHoard += hoard;
}

// 計(jì)算平均值
float cursorCount = cursor.getCount();
averageHoard = cursorCount > 0 ? (totalHoard / cursorCount) : Float.NaN;

// 完成之后關(guān)閉游標(biāo)
cursor.close();


添加、更新和刪除

SQLiteDatabase 提供了 insert、delete、update 方法來封裝執(zhí)行這些操作需要的 SQL 語(yǔ)句。如果你希望手動(dòng)去執(zhí)行這些操作,需要用到 execSQL 方法可以對(duì)數(shù)據(jù)庫(kù)表執(zhí)行有效的 SQL 語(yǔ)句。

1. 插入行

// 創(chuàng)建一個(gè)要插入的行新值
ContentValues contentValues = new ContentValues();

// 為每行賦值
contentValues.put(KEY_GOLD_HOARD_ACCESSIBLE_COLUMN, "");
contentValues.put(KEY_GOLD_HOARD_NAME_COLUMN, 123);
contentValues.put(KEY_GOLD_HOARDED_COLUMN, true);

// 把行插入到表中
SQLiteDatabase sdb = this.getReadableDatabase();
sdb.insert(this.DATABASE_TABLE, null, contentValues);

insert 方法的第二個(gè)參數(shù)稱為 null 列侵入(null column hack),如果想添加一個(gè)空行,在傳入 ContentValues 還必須傳入一個(gè)顯示的 null。

2. 更新行

// 創(chuàng)建更新行的 ContentValues
ContentValues updatedValues = new ContentValues();

// 為每一行賦值
updatedValues.put(KEY_GOLD_HOARDED_COLUMN, false);

// 指定一個(gè) where 子語(yǔ)句定義那些行應(yīng)該被更新
String where = KEY_ID + "=" + 1;
String[] whereArgs = null;

// 使用新值更新數(shù)據(jù)庫(kù)記錄
SQLiteDatabase sdb = getReadableDatabase();
sdb.update(DATABASE_TABLE, updatedValues, where, whereArgs);

3. 刪除行

// 指定一個(gè) where 子語(yǔ)句定義那些行應(yīng)該被刪除
String where = KEY_ID + "=" + 1;
String[] whereArgs = null;

// 使用新值更新數(shù)據(jù)庫(kù)記錄
SQLiteDatabase sdb = getReadableDatabase();
sdb.delete(DATABASE_TABLE, where, whereArgs);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/17452.html

相關(guān)文章

  • [轉(zhuǎn)]:tbox中數(shù)據(jù)庫(kù)的使用

    摘要:目前支持兩種關(guān)系型數(shù)據(jù)庫(kù)需要鏈接對(duì)應(yīng)的和,并對(duì)其接口進(jìn)行了封裝,使用更加的方便簡(jiǎn)潔并且只需要換個(gè),就可以隨時(shí)切換成其他數(shù)據(jù)庫(kù)引擎,而不需要修改接口。 TBOX目前支持sqlite3、mysql兩種關(guān)系型數(shù)據(jù)庫(kù)(需要鏈接對(duì)應(yīng)的libsqlite3.a和libmysql.a),并對(duì)其接口進(jìn)行了封裝,使用更加的方便簡(jiǎn)潔并且只需要換個(gè)url,就可以隨時(shí)切換成其他數(shù)據(jù)庫(kù)引擎,而不需要修改接口。 ...

    _ang 評(píng)論0 收藏0
  • 何成為 QueryPHP 開發(fā)者

    摘要:文檔開發(fā)基于單元測(cè)試實(shí)現(xiàn)的自動(dòng)化文檔當(dāng)前文檔開發(fā)計(jì)劃功能開發(fā)當(dāng)前計(jì)劃功能技術(shù)債務(wù)清償當(dāng)前技術(shù)債務(wù)單元測(cè)試盡可能減少當(dāng)前單元測(cè)試成為開發(fā)者需要加入我們的組織,如有相關(guān)意愿請(qǐng)發(fā)送郵件至小牛哥,我們會(huì)聯(lián)系你的。 QueryPHP 非常歡迎各位給我們共同的偉大的作品添磚加瓦,實(shí)現(xiàn)為 PHP 社區(qū)提供一個(gè)好框架的美好愿景。 文檔開發(fā).基于單元測(cè)試實(shí)現(xiàn)的自動(dòng)化文檔 當(dāng)前文檔開發(fā) 計(jì)劃功能.開發(fā)...

    bigdevil_s 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<