Android數據存儲之SQLite的操作


  Android作為一個應用在移動設備上的操作系統,自然也就少不了數據的存儲。然而SQLite作為一個輕型的關系型數據庫,基於其輕量、跨平台、多語言接口及安全性等諸多因數考慮,因而Android較大的數據存儲采用了SQLite。SQLite與大多數關系型數據庫一樣都遵循ACID,語法也非常相似。只要您懂得mysql、sqlserver等關系型數據庫的操作,只要查看下SQLite的官方文檔便可快速上手。SQLite語法您可通過http://sqlite.org/lang.html進行查看。

  接下來看看Android是怎樣操作SQLite的吧。Android下只要擴展SQLiteOpenHelper接口,並實現其Create和update方法便可以便捷地對SQLite進行管理。下面看下數據庫管理類。

package com.example.ibm.myappsqllite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by ibm on 2015/9/11.
 */
public class Db extends SQLiteOpenHelper {
    public Db(Context context, int version) {
        super(context, "db", null, version);//可以根據最后一個參數的version來完成表的自動創建和升級
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE user(" +
                "id integer primary key autoincrement, " +
                "name TEXT DEFAULT \"\"," + "sex TEXT DEFAULT \"\")";
        System.out.println("創建數據庫:" + sql);
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//更新數據庫
        String sql = "ALTER TABLE user ADD COLUMN mark TEXT DEFAULT \"\"";
        System.out.println("更新數據庫:" + sql);
        db.execSQL(sql);
    }
}

  在MainActivity.java中的onCreate方法添加如下代碼。

Db db = new Db(this, 1);

        //清空數據
        SQLiteDatabase sqLiteDb = db.getWritableDatabase();
        System.out.println("------------清空表數據------------");
        sqLiteDb.delete("user", null, null);
        System.out.println("------------充值表自增ID------------");
        sqLiteDb.execSQL("update sqlite_sequence SET seq = 0 where name ='user';");//重置id
        sqLiteDb.close();

//        寫入數據
        System.out.println("------------寫入數據------------");
        sqLiteDb = db.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("name", "王五");
        cv.put("sex", "男");
        sqLiteDb.insert("user", null, cv);

        cv = new ContentValues();
        cv.put("name", "李利");
        cv.put("sex", "女");
        sqLiteDb.insert("user", null, cv);
        sqLiteDb.close();

//        查詢數據
        db = new Db(this, 2);
        System.out.println("------------查詢數據1------------");
        SQLiteDatabase sqLiteDbup = db.getReadableDatabase();
        Cursor c = sqLiteDbup.query("user", new String[]{"id", "name", "sex"}, null, null, null, null, null);

        while (c.moveToNext()) {
            Integer id = c.getInt(c.getColumnIndex("id"));
            String name = c.getString(c.getColumnIndex("name"));
            String sex = c.getString(c.getColumnIndex("sex"));
            System.out.println(String.format("id: %d, name: %s, sex: %s", id, name, sex));
        }
        sqLiteDbup.close();

//更新數據
        System.out.println("------------更新數據------------");
        SQLiteDatabase sqldb = db.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("sex", "gay");
        contentValues.put("mark", "wang wu is gay");
        String[] whereValues = {"王五"};
        sqldb.update("user", contentValues, "name = ?", whereValues);
        sqldb.close();


//        查詢數據
        System.out.println("------------查詢數據2------------");
        sqLiteDbup = db.getReadableDatabase();
        c = sqLiteDbup.query("user", new String[]{"id", "name", "sex", "mark"}, null, null, null, null, null);

        while (c.moveToNext()) {
            Integer id = c.getInt(c.getColumnIndex("id"));
            String name = c.getString(c.getColumnIndex("name"));
            String sex = c.getString(c.getColumnIndex("sex"));
            String mark = c.getString(c.getColumnIndex("mark"));
            System.out.println(String.format("id: %d, name: %s, sex: %s, mark: %s", id, name, sex, mark));
        }
        sqLiteDbup.close();

        //刪除數據
        System.out.println("------------刪除數據------------");
        sqldb = db.getWritableDatabase();
        String[] delWhere = {"李利"};
        sqldb.delete("user", "name = ?", delWhere);
        sqldb.close();

//        查詢數據
        System.out.println("------------查詢數據3------------");
        sqLiteDbup = db.getReadableDatabase();
        c = sqLiteDbup.query("user", new String[]{"id", "name", "sex", "mark"}, null, null, null, null, null);

        while (c.moveToNext()) {
            Integer id = c.getInt(c.getColumnIndex("id"));
            String name = c.getString(c.getColumnIndex("name"));
            String sex = c.getString(c.getColumnIndex("sex"));
            String mark = c.getString(c.getColumnIndex("mark"));
            System.out.println(String.format("id: %d, name: %s, sex: %s, mark: %s", id, name, sex, mark));
        }
        sqLiteDbup.close();

        db.close();

  將應用運行到虛擬機后,你可以看到如下結果

09-11 18:58:29.460    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ 創建數據庫:CREATE TABLE user(id integer primary key autoincrement, name TEXT DEFAULT "",sex TEXT DEFAULT "")
09-11 18:58:29.500    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------清空表數據------------
09-11 18:58:29.532    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------充值表自增ID------------
09-11 18:58:29.532    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------寫入數據------------
09-11 18:58:29.616    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------查詢數據1------------
09-11 18:58:29.628    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ 更新數據庫:ALTER TABLE user ADD COLUMN mark TEXT DEFAULT ""
09-11 18:58:29.640    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 1, name: 王五, sex: 男
09-11 18:58:29.644    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 2, name: 李利, sex: 女
09-11 18:58:29.644    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------更新數據------------
09-11 18:58:29.668    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------查詢數據2------------
09-11 18:58:29.684    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 1, name: 王五, sex: gay, mark: wang wu is gay
09-11 18:58:29.684    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 2, name: 李利, sex: 女, mark:
09-11 18:58:29.688    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------刪除數據------------
09-11 18:58:29.708    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------查詢數據3------------
09-11 18:58:29.716    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 1, name: 王五, sex: gay, mark: wang wu is gay

  此時可以查看下模擬器中的/data/data/項目包/databases/目錄下,已經存在了一個db數據庫(名字為前面定義的數據庫名)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM