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