Android sqlite數據庫操作筆記

這篇博客記錄了一個app中,建立日誌數據庫需要的操作。應用場景如下:
app有個登錄系統,每一次登錄,都需要記錄一條日誌信息,信息中記錄登錄的用戶名,時間等信息。數據總共只能保存最近50次登陸的記錄,超過50次以後,就會刪除最前面的記錄。保證數據庫的行數維持在50行不變。
對數據庫的操作使用的是sql語句的方式。
由於本人對sql語句不太熟練,所以將其記錄下來,供以後再次使用sql數據庫的時候參考使用,如果您對sqlite的操作也不太熟練,那麼您可以參考本篇文章,類似的操作只是改改參數就可以了。如果您是大神,那麼不要耽擱您的時間,請繞道,不喜勿碰!

首先需要定義了數據庫的位置,數據庫的名字。這個數據庫使用的是單例模式。

    private SQLiteDatabase db =null;
    private static final String PACKAGE_NAME = "com.example.sqlite";
    private static final String DATABASE_NAME = "log.db";
    private static final String DATA_DATA = "/data/data/";

    private static AppLogAccessDatabase mInstance=null;
    public static AppLogAccessDatabase getInstance(){
        if (mInstance==null){
            mInstance = new AppLogAccessDatabase();
        }
        return mInstance;
    }

接下來全是對數據庫的操作。

創建數據庫

    public AppLogAccessDatabase(){
        String str = DATA_DATA+PACKAGE_NAME+"/"+DATABASE_NAME;
        Log.i(TAG,"db_create with name: "+str);
        db = SQLiteDatabase.openOrCreateDatabase(str, null);
    }

創建表

    public Boolean createUserLogInfoTable()
    {
        try{
            db.execSQL("create table if not exists UserLogInfo (_id INTEGER PRIMARY KEY AUTOINCREMENT,userName VARCHAR,userAction VARCHAR,accessTime VARCHAR)");
        }
        catch(SQLException e)
        {
            return false;
        }
        return true;
    }

插入數據

    public Boolean insertOneLogInfo(UserLogInfo info)
    {
        try{
            db.execSQL("insert into UserLogInfo values(NULL,?,?,?)",new Object[]{info.userName,info.userAction,info.accessTime});
        }
        catch(SQLException e)
        {
            return false;
        }
        return true;
    }

刪除第一條數據

    public Boolean deleteTopLogInfo()
    {

        try
        {
            db.execSQL("delete from UserLogInfo where _id in(select _id from UserLogInfo  order by _id limit 0,1)");
        }
        catch(SQLException e)
        {
            Log.d("log_db","deleteTopLogInfo fail");
            return false;
        }
        Log.d("log_db","deleteTopLogInfo sucess");
        return true;
    }

獲取所有用戶

    public List<UserLogInfo> queryLogInfoList() {
        List<UserLogInfo> lstData;
        lstData = new ArrayList<UserLogInfo>();

        Cursor c = null;
        c = db.rawQuery("SELECT * FROM UserLogInfo", null);
        while(c.moveToNext())
        {
            UserLogInfo  tmpData= new UserLogInfo();
            tmpData.userName = c.getString(c.getColumnIndex("userName"));
            tmpData.userAction = c.getString(c.getColumnIndex("userAction"));
            tmpData.accessTime = c.getString(c.getColumnIndex("accessTime"));
            lstData.add(tmpData);
            Log.d("log_db",tmpData.toString()+"id: "+c.getInt(c.getColumnIndex("_id")));
        }
        c.close();
        return lstData;
    }

獲取當前數據庫的行數

    public int getLogInfoCount(){
        Cursor c = null;
        c = db.rawQuery("SELECT * FROM UserLogInfo", null);
        int count = c.getCount();
        Log.d("log","count: "+count);
        c.close();
        return count;
    }

代碼中使用到的UserLogInfo類定義如下:

public class UserLogInfo {
    public String userName;
    public String userAction;
    public String accessTime;

    @Override
    public String toString() {
        return "userName: "+userName+" userAction: "+userAction+" accessTime: "+accessTime;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章