您的位置:首页 > 移动开发 > Android开发

Android SQLite高级操作之泛型对象操作

2015-12-18 16:59 591 查看
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”}); 即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: