Android之SQLite的使用

最近自己在寫一個小的app,用到了SQLite數據庫,就簡單探討一下SQLite數據庫在android 開發中的用法。數據庫存儲數據有很明顯的優勢,數據條理清晰,易於提取和存儲,安全性也有一定的保證。



SQLite 的使用方法:

首先我們需要一個Helper,它繼承於SQLiteOpenHelper

public class DBHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "inote.db";  //數據庫的名字
    private static final int DATABASE_VERSION = 2;           //數據庫的版本號
    private static final String CREATE_TABLE_SQL =           //創建的表
                    "create table if not exists note"+
                    "(nCTime varchar not null," +
                    "nId integer," +
                    "nSTime varchar not null," +
                    "nTitle varchar not null," +
                    "nContent varchar," +
                    "nEngency varchar," +
                    "nPointX integer not null," +
                    "nPointY integer not null,"+
                    "nAId Integer not null default 0, primary key(nCTime,nId))";
    private static final String VERSION_TWO = "alter table note add nAId Integer default 0";

    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);   //指明瞭第一次創建時的數據庫名字,版本號
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_SQL);                            //這裏創建表
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  //當數據庫版本號變化時執行
        db.execSQL(VERSION_TWO);
    }
}

我們先來說一下這個數據庫的版本號,開始之初我也沒有理解這個是幹嘛的,後來當我需要在原來的表中增加新的一列時才發想,我到底怎麼增加一列呢?
原來我們想要保存原來數據庫的數據又要增加一列,只需要修改下這裏的數據庫版本號比原來的大,並寫好增加列的sql語句,打包好apk安裝到原來已經安裝的手機中,就可以了,系統會檢測到這個版本號的變大,並執行onUpgrade函數,此時你的 數據庫更新操作就增加了一列。

Helper創建好,我們就可以準備操作數據庫了,這時我們在創建一個DBManager的工具類,用來增刪更改數據。。
package csu.scrovor.cn.inote.Util.SQLite;

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

import java.util.Date;
import java.util.ArrayList;
import java.util.List;

import csu.scrovor.cn.inote.Beans.Engency;
import csu.scrovor.cn.inote.Beans.NoteInfo;
import csu.scrovor.cn.inote.Util.Utils;

/**
 * Created by lenovo on 2016/10/28.
 */
public class DBManager {
    private SQLiteDatabase db;
    private DBHelper helper;
    private String insertSql = "insert into note values(?,?,?,?,?,?,?,?,?)";
    private String updateSql = "update note set nSTime=?,nTitle=?,nContent=?,nEngency=? where nCTime=? and nId=?";
    private String deleteSql = "delete from note where nCTime=? and nId=?";
    public DBManager(Context context){
        helper = new DBHelper(context);
        db = helper.getWritableDatabase(); //通過此方法來獲取可寫的數據庫實例
    }
    
    public void insert(NoteInfo noteInfo){
        db.beginTransaction();    //開始事務
        try{
            db.execSQL(insertSql,new Object[]{
                    noteInfo.getCdate(),
                    noteInfo.getnId(),
                    noteInfo.getDate().toString(),
                    noteInfo.getKeyWord(),
                    noteInfo.getContent(),
                    noteInfo.getEngency().toString(),
                    noteInfo.getPointX(),
                    noteInfo.getPointY(),
                    noteInfo.getaId()
            });
            db.setTransactionSuccessful();
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            db.endTransaction();   //結束事務
        }
    }

    public void close(){
        db.close();
    }
}
這裏說明下,所有對數據庫中的數據進行修改的都要包在beginTransaction()和endTransaction()之中,這是爲了防止併發導致的數據異常。

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