前言
最近工作需要,把用戶檢測的一些數據存到本地,將數據保存到歷史記錄裏,用戶可以選擇自己滿意的數據上傳雲端,話不多說直接貼代碼。
public class DBServices extends SQLiteOpenHelper{
public final static int version = 1;
public final static String dbName = "MonitorData"+
AppContext.getInstance().getProperty("UsrName");//不同數據庫名,根據當前登錄用戶賬號做了區別
public DBServices(Context context){
super(context,dbName,null,version);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.beginTransaction();
//創建郵件表
String create_mail_sql = "CREATE TABLE if not exists [MonitorData]"+
"(_id integer primary key autoincrement,object object)";
db.execSQL(create_mail_sql);
db.setTransactionSuccessful();
db.endTransaction();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
//增
public void insert(String table, String nullColumnHack, ContentValues values){
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
db.insert(table, nullColumnHack, values);
db.setTransactionSuccessful();
db.endTransaction();
}
//刪
public void delete(String table , String whereClause , String[] whereArgs){
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
db.delete(table, whereClause, whereArgs);
db.setTransactionSuccessful();
db.endTransaction();
}
//改
public void update(String table, ContentValues values,
String whereClause, String[] whereArgs){
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
db.update(table, values, whereClause, whereArgs);
db.setTransactionSuccessful();
db.endTransaction();
}
//查
public Cursor read(String sql ,String[] args){
SQLiteDatabase db = this.getReadableDatabase();
db.beginTransaction();
Cursor cursor = db.rawQuery(sql, args);
db.setTransactionSuccessful();
db.endTransaction();
return cursor;
}
}
在需要使用的activity或者fragment裏初始化DBServices,然後直接保存Object
DBServices db = new DBServices(this.getContext());
db = new DBServices(this.getContext());
/**
* 保存數據
*/
public void saveData(MonitorDataObject object) {
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(arrayOutputStream);
objectOutputStream.writeObject(object);
objectOutputStream.flush();
byte data[] = arrayOutputStream.toByteArray();
objectOutputStream.close();
arrayOutputStream.close();
SQLiteDatabase database = db.getWritableDatabase();
database.execSQL("insert into MonitorData (object) values(?)", new Object[] { data });
database.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
拿取數據
DBServices db = new DBServices(this);//定義變量
db = new DBServices(this);//初始化
//拿到主鍵_id的列表方便查詢,通過object是查不到的
public ArrayList<Integer> getAllInt() {
ArrayList<Integer> persons = new ArrayList<Integer>();
SQLiteDatabase database = db.getReadableDatabase();
Cursor cursor = database.rawQuery("select * from MonitorData", null);
if (cursor != null) {
while (cursor.moveToNext()) {
//如果你代碼中有用它從數據庫中取一個整型值,需要注意:如果數據庫中的這一個數據恰好是null,而null又不是int,此時並不會拋出NumberFormatException 異常,而是直接返回0!
int person =cursor.getInt(0);
persons.add(person);
}
}
Log.d("Persons-Count",Integer.toString(persons.size()));
return persons;
}
//拿去數據
public ArrayList<MonitorDataObject> getAllObject() {
ArrayList<MonitorDataObject> persons = new ArrayList<MonitorDataObject>
();
SQLiteDatabase database = db.getReadableDatabase();
Cursor cursor = database.rawQuery("select * from MonitorData", null);
if (cursor != null) {
while (cursor.moveToNext()) {
Log.d("data-id",cursor.getString(0));
byte data[] = cursor.getBlob(cursor.getColumnIndex("object"));
ByteArrayInputStream arrayInputStream = new
ByteArrayInputStream(data);
try {
ObjectInputStream inputStream = new ObjectInputStream
(arrayInputStream);
MonitorDataObject person = (MonitorDataObject)
inputStream.readObject();
persons.add(person);
inputStream.close();
arrayInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Log.d("Persons-Count",Integer.toString(persons.size()));
return persons;
}
刪除某個id的數據
DBServices db = new DBServices(this);
db = new DBServices(this);
//index需要刪除的_id,上面代碼有拿到id的列表
String[] args = {String.valueOf(index)};
db.delete("MonitorData","_id=?",args);