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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章