這篇博客記錄了一個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;
}
}