使用手機本地sqlite數據庫存一些類

前言

最近工作需要,把用戶檢測的一些數據存到本地,將數據保存到歷史記錄裏,用戶可以選擇自己滿意的數據上傳雲端,話不多說直接貼代碼。


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);

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章