Android sqlite数据库操作笔记

来源:互联网 发布:手机角度水平仪软件 编辑:程序博客网 时间:2024/05/16 12:55

这篇博客记录了一个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;    }}
0 0