Android SQLiteOpenHelper類的使用


SQLiteOpenHelper類是Android平台提供的用於SQLite數據庫的創建、打開以及版本管理的幫助類。一般需要繼承並這個類並實現它的onCreate和onUpgrade方法,在構造方法中調用SQLiteOpenHelper類的構造方法。

 

在實際應用中一般是先創建一個繼承自SQLiteOpenHelper類的輔助類的實例,在調用該實例的getWritableDatabase()或getReadableDatabase()方法獲取SQLiteDataBase對象。

 

SQLiteOpenHelper類的構造方法:

SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version)

context 上下文環境

name  要創建或打開的數據庫名稱

factory  用於數據查詢的時候實例化一個游標,一般為null

version  數據庫版本號,不能小於1

 

onCreate(SQLiteDatabase db)方法:當首次創建數據庫時調用該方法,一般進行創建表等初始化操作;

 

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法:當傳入的數據庫版本號大於當前的數據庫版本是會調用該方法,可以在這個方法里進行數據庫的更改升級;

 

另外還可以選擇實現onDowngrade方法和onOpen方法:

當傳入的數據庫版本號小於數據庫當前的版本號時,會調用onDowngrade方法;

onOpen方法在onCreate、onUpgrade、onDowngrade之后被調用。

 

 

SQLiteOpenHelper的getWritableDatabase()和getReadableDatabase()方法:

一般情況下getReadableDatabase()與getWritableDatabase()返回的都是可讀寫的數據庫對象,只有在數據庫僅開放只讀權限或磁盤已滿時getReadableDatabase()方法才會返回一個只讀的數據庫對象。

實際上在SQLiteOpenHelper類的構造方法中並未進行數據庫的打開或創建,而是在getWritableDatabase()和getReadableDatabase()中打開或創建數據庫。

 

 

示例代碼:

SqliteHelper類:

public class SqliteHelper extends SQLiteOpenHelper {

   

    public SqliteHelper(Context context,String dbname,int version) {

        super(context, dbname, null, version);

        // TODO Auto-generated constructor stub

    }

 

    @Override

    public void onCreate(SQLiteDatabase db) {

        // TODO Auto-generated method stub

        String sql_user="create table if not exists user("

                +"username text primary key,"

                +"userpwd text)";

        db.execSQL(sql_user);// 創建一個用戶表

    }

 

    @Override

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

        // TODO Auto-generated method stub

    }

   

    public void deleteTable(SQLiteDatabase db, String name) {

        String sql_delteTable = "DROP TABLE if exists " + name;

        db.execSQL(sql_delteTable);

    }

}

 

DBManager 類:(進行數據查詢和增刪改)

public class DBManager {

    private SqliteHelper helper = null;

    private SQLiteDatabase db = null;

 

    /**

     * 構造函數

     *

     * @param context

     */

    public DBManager(Context context) {

        helper = new SqliteHelper(context,"test.db",1);

        db = helper.getWritableDatabase();

    }

 

    /**

     * 關閉數據庫

     */

    public void Close() {

        if (db != null) {

            helper.close();

        }

    }

 

    /**

     * 添加用戶

     *

     * @return the row ID of the newly inserted row, or -1 if an error occurred

     */

    public long AddUser() {

        ContentValues values = new ContentValues();

        values.put("username", "kitty");

        values.put("userpwd", "123456");

        return db.insertOrThrow("user", null, values);

    }

 

    /**

     * 驗證賬戶是否存在

     *

     * @param username

     * @return boolean

     */

    public boolean CheckUsername(String username) {

        String sql = "select username from user where username=?";

        Cursor cursor = db.rawQuery(sql, new String[] { username });

        return (cursor.getCount() > 0);

    }

 

    /**

     * 驗證登錄信息

     *

     * @param username

     *            賬戶

     * @param password

     *            密碼

     * @return 0-驗證通過 1-賬戶不存在 2-密碼錯誤

     */

    public int VerifyLogin(String username, String password) {

 

        String sql = "select * from user where username=? and userpwd=?";

        Cursor cursor = db.rawQuery(sql, new String[] { username, password });

        if (cursor.getCount() > 0) {

            return 0;

        } else {

            if (!CheckUsername(username)) {

                return 1;

            } else {

                return 2;

            }

        }

    }

}


免責聲明!

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



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