Android SQLite高級操作之泛型對象操作

SQLite是一款廣泛用於嵌入式設備上的輕量級關係型數據庫,而在安卓設備的數據存儲上更是有舉足輕重的位置,所以SQLite的基本操作是每個安卓開發者必須掌握的技能。而它操作與用法在網上已經有大量的資料,博客可以參考,以這裏我也不老生常談,直接進入主題——SQLite泛型對象操作。

我們在做開發寫代碼的時候,很大可能會用到javabean來進行對象屬性的操作,當我們需要把一個對象的所有屬性寫入數據庫時,通常方法是getXXX()獲取屬性值後再進行數據的存儲操作,但是如果這個對象屬性很多的話,那麼用這種方法將是一種很累人的方式,並且會大大的增加不必要的代碼,那麼就會想到要是可以直接把對象進行存儲到數據庫就好了,那麼這個當然是可以實現,就是把對象進行系列化,系列化之後再進行存儲。一步到位!同時,爲了適應所有不同的對象,這裏把它定義成泛型對象,從此不管什麼bean,都可以直接進行簡單的調用,即可完成存儲。

下面是主要代碼:

	/**
	 * 保存數據
	 * 
	 * @param obj
	 */
	public void saveObj(T obj) {
		ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
		try {
			ObjectOutputStream objectOutputStream = new ObjectOutputStream(arrayOutputStream);
			objectOutputStream.writeObject(obj);
			objectOutputStream.flush();
			byte data[] = arrayOutputStream.toByteArray();
			objectOutputStream.close();
			arrayOutputStream.close();
			SQLiteDatabase database = this.getWritableDatabase();
			database.execSQL("insert into "+tableName+" ("+column+") values(?)",
					new Object[] { data });
			database.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

/**
	 * 獲取數據list
	 * 
	 */
	@SuppressWarnings("unchecked")
	public ArrayList<T> getAllObj() {
		ArrayList<T> objs = new ArrayList<T>();
		SQLiteDatabase database = this.getReadableDatabase();
		Cursor cursor = database.rawQuery("select * from "+tableName, null);
		if (cursor != null) {
			while (cursor.moveToNext()) {
				idList.add(Integer.toString(cursor.getInt(0)));
				byte data[] = cursor.getBlob(cursor.getColumnIndex(column));
				ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(data);
				try {
					ObjectInputStream inputStream = new ObjectInputStream(
							arrayInputStream);
					T obj = (T) inputStream.readObject();
					objs.add(obj);
					inputStream.close();
					arrayInputStream.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return objs;
	}

調用:

db = new DBServices<Song>(this,tableName);//實例

songs = db.getAllObj();//獲取所有的對象List

db.saveObj(song);//存儲某個對象

其他操作也跟正常的SQLite操作一樣,例如刪除數據庫表中id爲1的對象

則:db.delete(tableName , "id=?", new String[] {“1”}); 即可。



發佈了33 篇原創文章 · 獲贊 36 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章