Android基礎之Sqlite數據庫

在Android平臺上,集成了一個嵌入式關係型數據庫—SQLite,它是一種非常輕量的數據庫管理系統,SQLite3支持 NULL、INTEGER、REAL(浮點數字)、TEXT(字符串文本)和BLOB(二進制對象)數據類型,SQLite通過文件來保存數據庫,一個文件就是一個數據庫。
- 常用類介紹
- SQLiteOpenHelper
數據庫輔助抽象類,通過實現它的子類可以創建數據庫以及實現版本更新,通過getWriteableDatabase獲得getReadableDatabase獲取數據庫訪問類
-SQLiteDatabase:數據庫訪問類
通過數據庫訪問類,可以實現對數據庫的增刪改查等操作
Android創建Sqlite數據庫
SQLite數據庫是在第一次調用的時候創建數據庫的
創建數據庫的步驟:

1.定義一個db輔助類,繼承SQLiteOpenHelper抽象類,通過構造方法設置數據庫名及版本信息。
2. 重寫onCreate()方法,該方法只會在數據庫第一次創建的時候調用,在此方法中適合做數據庫初始化操作,比如創建數據表等。
3. 重寫onUpGrade() , 當數據庫版本更新時調用,適合做表結構的修改或者添加刪除表。

* 參考代碼:

/**
     * 數據庫輔助類的構造方法,當數據庫存在,則直接返回,沒有則創建數據庫,並調用onCreate()初始化數據庫
     * @param context:上下文
     * @param name :數據庫名  以文件的形式保存
     * @param factory :遊標工廠,一般是由系統來提供
     * @param version :版本   最小爲1的整數
     */
    public DBHelper(Context context) {
        super(context, NAME, null, VERSION);
    }
    /**
     * 當初始化數據庫的時候調用,在這裏進行數據表的創建,相應初始數據的添加
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        //創建book表
    String sqlStr="create table t_book(_id integer primary key autoincrement ,name text ,price integer)";
        //執行sql語句
        db.execSQL(sqlStr);
    }
    /**
     * 當版本要更新的時候調用,一般實現數據表結構的修改,
     * 添加刪除表,當newVersion 大於oldVersion時調用
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists t_book ");
        onCreate(db);
        System.out.println("onUpgrade");
    }

SQLite數據庫增刪改查
1 添加記錄

public int save(ContentValues values){
        //取得SqliteDatabase 對象來對數據庫進行增刪改查
        SQLiteDatabase db=dbHelper.getWritableDatabase();
        /**
         * 1、table:表名
         * 2、nullColumnHack:當values爲null時 ,默認填充要插入的字段
         * 3、ContentValues:內容值,好比HashMap
         */
        Long row=db.insert(TABLE, null, values);
        // insert into  table (name,price) values("鬼吹燈1","35")
        //假如 ContentValues爲空 :insert into table(null)values (null)
        //關閉數據庫
        db.close();
        return row.intValue();
    }

2 刪除記錄

//刪除一條記錄
    public int delete(int id){
        SQLiteDatabase db=dbHelper.getWritableDatabase();
        /**
         * table:表名
         * whereClause:條件
         * whereArgs:條件佔位符  id=?        new String[]{id}
         */
        int num=db.delete(TABLE, " id=? ", new String[]{String.valueOf(id)});
        db.close();
        return num;
    }

3 查詢

//查找所有記錄
    public ArrayList<HashMap<String, Object>> find(){
        SQLiteDatabase db=dbHelper.getReadableDatabase();
ArrayList<HashMap<String,Object>>data=new ArrayList<HashMap<String,Object>>();
    Cursor cursor=db.query(TABLE, null, null, null, null, null, PRICE+" desc");
        while(cursor.moveToNext()){
            HashMap<String, Object> map=new HashMap<String, Object>();
            map.put(ID, cursor.getInt(cursor.getColumnIndex(ID)));
            map.put(NAME, cursor.getString(cursor.getColumnIndex(NAME)));
            map.put(PRICE, cursor.getInt(cursor.getColumnIndex(PRICE)));
            data.add(map);
        }
        db.close();
        return data;
    }
    /**
     * 查尋數據庫中的數據,返回的值爲Cursor類型
     */
    public Cursor findByCursor(){
        SQLiteDatabase db=dbHelper.getReadableDatabase();
        Cursor cursor=db.query(TABLE, null, null, null, null, null,null);
        //用Cursor返回 ,不能關閉數據庫
        return cursor;
    }

4 更新記錄

/**
     * 記錄更新
     * @param values
     * @return
     */
    public int update(ContentValues values){
        //更新某條記錄 傳一個Id過來
        String id=values.getAsString(ID);
        SQLiteDatabase db=dbHelper.getWritableDatabase();
        int num=db.update(TABLE, values, " id=?", new String[]{id});
        db.close();
        //關閉數據庫
        return num;
    }

SQLite事務處理

/**
     * 一條記錄更新
     * @param values
     * @return
     */
    public int update(ContentValues values){
        //更新某條記錄 傳一個Id過來
        String id=values.getAsString(ID);
        SQLiteDatabase db=dbHelper.getWritableDatabase();
        int num=db.update(TABLE, values, " id=?", new String[]{id});
        db.close();
        //關閉數據庫
        return num;
    }

寫博客純屬個人愛好,如果又不對的地方,歡迎吐槽。

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