Android學習筆記----SQLite數據庫基本用法

/*************************************************************************/

數據庫

Android 爲了讓我們能夠更加方便地管理數據庫,專門提供了一個 SQLiteOpenHelper 幫助類,藉助這個類就可以非常簡單地對數據庫進行創建和升級

SQLiteOpenHelper 具有的方法

onCreate()    : 抽象方法,需在子類中實現,在該方法中實現創建數據庫的邏輯
onUpgrade(): 抽象方法,需在子類中實現,在該方法中實現升級數據庫的邏輯

getWritableDatabase()  : 實 例 方 法,
創建或打開一個現有的數據庫(如果數據庫已存在
則直接打開,否則創建一個新的數據庫),並返回一個可對數據庫進行讀寫操作的對象,


getReadableDatabase() : 實 例 方 法,
創建或打開一個現有的數據庫(如果數據庫已存在
則直接打開,否則創建一個新的數據庫),並返回一個可對數據庫進行讀寫操作的對象,

getWritableDatabase()跟getReadableDatabase()的區別
當數據庫不可寫入的時候(如磁盤空間已滿) getReadableDatabase()方法返回的對
象將以只讀的方式去打開數據庫,而 getWritableDatabase()方法則將出現異常

構造方法
SQLiteOpenHelper 中有兩個構造方法可供重寫,一般使用參數少一點的那個構造方法即
可。
構造方法的參數
第一個參數   Context,上下文
第二個參數   創建的數據庫的名稱
第三個參數   在查詢數據的時候返回一個自定義的 Cursor,一般都是傳入 null
第四個參數   當 前 數 據 庫 的 版 本 號,可 用 於 對 數 據 庫 進 行 升 級 操 作

構 建 出SQLiteOpenHelper 的實例之後,再調用它的 getReadableDatabase()或 getWritableDatabase()方法就能夠創建數據庫了,數據庫文件會存放在/data/data/<package name>/databases/目錄下。此時, 重寫的 onCreate()方法也會得到執行, 所以通常會在這裏去處理一些創建表的邏輯。


新建一個類繼承 SQLiteOpenHelper,給該類創建構造方法

public class CoolWeatherOpenHelper extends SQLiteOpenHelper {

/*
    * Province省份
    *
    * */
public static final  String CREATE_PROVINCE = "create table Province(id integer primary key autoincrement,province_name text,province_code text)";

/*
    * City城市
    *
    * */
public static  final  String CREATE_CITY = "create table City(id integer primary key autoincrement,city_name text,city_code text,province_code text)";


/*
    * Country縣
    *
    * */

public  static final  String CREATE_COUNTRY = "create table Country(id integer primary key autoincrement,country_name text,country_code text,city_code text)";


         public CoolWeatherOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
         }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_PROVINCE);
            db.execSQL(CREATE_CITY);
            db.execSQL(CREATE_COUNTRY);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        }
}

添加數據

CoolWeatherOpenHelper  dbHelper = new CoolWeatherOpenHelper(this, "cool_weather", null, 1);
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
// 開始組裝第一條數據
values.put("province_name", "山東");
values.put("province_code", "07");
db.insert("Province", null, values); // 插入第一條數據
values.clear();
// 開始組裝第二條數據
values.put("province_name", "山西");
values.put("province_code", "09");
db.insert("Province", null, values); // 插入第二條數據

更新數據

SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("province_name", "湖北");
db.update("Province", values, "province_code = ?", new String[] {"09"});

刪除數據

SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("Province", "province_code = ?", new String[] {"09"});

查詢數據

SQLiteDatabasedb = dbHelper.getWritableDatabase();
Cursor cursor = db.query("Province", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
        String priovice_name = cursor.getString(cursor.getColumnIndex("province_name"));
        String province_code = cursor.getString(cursor.getColumnIndex("provice_code"));
        Log.d("MainActivity", "province name is " + priovice_name);
        Log.d("MainActivity", "province code is " + province_code);
    } while (cursor.moveToNext());
}
cursor.close();

數據庫中的事務

SQLiteDatabase db = dbHelper.getWritableDatabase();
db.beginTransaction(); // 開啓事務
try {
    ..............................................................
    ..............................................................
    ..............................................................
db.setTransactionSuccessful(); // 事務已經執行成功
} catch (Exception e) {
   e.printStackTrace();
} finally {
   db.endTransaction(); // 結束事務
}

注:爲了確保endTransaction()方法一定會執行,將該方法放在finally方法裏面

Android 已經給我們提供了很多非常方便的 API 用於操作數據庫,不過總會有一些人不習慣去使用這些輔助性的方法,而是更加青睞於直接使用 SQL 來操作數據庫

添加數據
db.execSQL("insert into Province (provice_name, province_code) values(?, ?)",new String[] {  "山東", "07" });

更新數據
db.execSQL("update Province set province_code = ? where province_name = ?", new String[] { "10", "山西" });

刪除數據
db.execSQL("delete from Province where province_code = ?", new String[] { "10" });

查詢數據
db.rawQuery("select * from Book", null);

















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章