Android 講解:存儲(2)

SQLite 是一個輕量級而又快速的數據庫。

SQLite 創建

在Android 中可以繼承SQLiteOpenHelper 類來操作SQLite 數據庫。
在Android 中,創建的數據庫都是在:/data/data/<packageName>/databases/<dataBaseName>

1. 繼承SQLiteOpenHelper

繼承SQLiteOpenHelper 類,重寫一個構造函數,OnCreate 函數和OnUpgrade 函數。

DBhelper.java

package cn.met0.android.chapter4;

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

public class DBHelper extends SQLiteOpenHelper {

    String user = "create table user(id integer primary key,username text,password text)";
    String info = "create table info(id integer primary key,str text)";

    public DBHelper(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);

    }

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

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        switch (newVersion) {
        case 2:
            db.execSQL(info);
            break;

        default:
            break;
        }
    }

}

DBHelper(Context, String, CursorFactory, int) 用來獲取數據庫操作對象,Context 爲一個Activity對象、String數據庫名稱、CursorFactory 爲null ,int 爲版本號。

onCreate(SQLiteDatabase db) 當創建DBhelp對象時,如果傳入的name(數據庫名稱)不存在時,則執行這個方法,通常爲第一次初始化表結構。

onUpgrade(SQLiteDatabase , int , int ) 當創建DBhelp對象時,如果數據庫已存在,並且傳入的版本號不同,則會執行這個方法,通常用來更新表結構。

2. 開始創建


MainActivity.java

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DBHelper db = new DBHelper(this, "user.db", null, 1);
        SQLiteDatabase sql = db.getWritableDatabase();
        sql.execSQL("insert into user (id,username,password)  values (1,'admin','123456')");
    }

插入數據


插入數據除了使用sql 語句外,還可以有更簡單的方式。

插入數據

        DBHelper db = new DBHelper(this, "user.db", null, 2);
        SQLiteDatabase sql = db.getWritableDatabase();

        ContentValues value = new ContentValues();
        value.put("id", 2);
        value.put("username", "tom");

        sql.insert("user", null, value);

ContentValues 對象是一個存儲一條記錄的對象
sql.insert("user", null, value);

Param Context
“user” 操作的表名
null 默認爲null
value 插入的數據

更新數據


        DBHelper db = new DBHelper(this, "user.db", null, 2);
        SQLiteDatabase sql = db.getWritableDatabase();

        ContentValues value = new ContentValues();
        value.put("username", "jack");
        value.put("password", "abcdef");

        sql.update("user", value, "username = ?", new String[]{"tom"});

ContentValues 對象爲要更新的內容

sql.update("user", value, "username = ?", new String[]{"tom"});

Param Context
“user” 操作的表名
value 要更新成的內容
“username = ?” 更新條件
new String[]{“tom”} 更新條件參數

刪除數據

        DBHelper db = new DBHelper(this, "user.db", null, 2);
        SQLiteDatabase sql = db.getWritableDatabase();


        sql.delete("user", "username = ?", new String[]{"tom"});

sql.delete("user", "username = ?", new String[]{"tom"});

Param Context
“user” 操作的表名
“username = ?” 刪除數據的條件
new String[]{“tom”} 條件參數

查詢數據


        DBHelper db = new DBHelper(this, "user.db", null, 2);
        SQLiteDatabase sql = db.getWritableDatabase();


        sql.query("user", null, null, null, null, null, null);

這裏寫圖片描述

事務

    DBHelper db = new DBHelper(this, "user.db", null, 2);
        SQLiteDatabase sql = db.getWritableDatabase();

        ContentValues value = new ContentValues();
        value.put("username", "tom");
        value.put("password", "123456");


        try{
            sql.beginTransaction();
            sql.delete("user", "username = ?", new String[]{});
            sql.insert("user", null, value);
            sql.setTransactionSuccessful();
        }catch (Exception e){
            sql.endTransaction();
        }finally{
            sql.close();
        }

sql.beginTransaction(); 開啓事務

sql.setTransactionSuccessful(); 提交事務

sql.endTransaction(); 回滾事務

注意

在重寫OnCreate 方法時,不能寫插入sql語句,否則將會創建不成功。
除非創建對象後,也執行插入語句。

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