您的位置:首页 > 移动开发 > Android开发

Android sqlite数据库操作笔记

2017-05-06 16:28 549 查看
这篇博客记录了一个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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息