Android SQLite高级操作之泛型对象操作
2015-12-18 16:59
591 查看
SQLite是一款广泛用于嵌入式设备上的轻量级关系型数据库,而在安卓设备的数据存储上更是有举足轻重的位置,所以SQLite的基本操作是每个安卓开发者必须掌握的技能。而它操作与用法在网上已经有大量的资料,博客可以参考,以这里我也不老生常谈,直接进入主题——SQLite泛型对象操作。
我们在做开发写代码的时候,很大可能会用到javabean来进行对象属性的操作,当我们需要把一个对象的所有属性写入数据库时,通常方法是getXXX()获取属性值后再进行数据的存储操作,但是如果这个对象属性很多的话,那么用这种方法将是一种很累人的方式,并且会大大的增加不必要的代码,那么就会想到要是可以直接把对象进行存储到数据库就好了,那么这个当然是可以实现,就是把对象进行系列化,系列化之后再进行存储。一步到位!同时,为了适应所有不同的对象,这里把它定义成泛型对象,从此不管什么bean,都可以直接进行简单的调用,即可完成存储。
下面是主要代码:
调用:
db = new DBServices<Song>(this,tableName);//实例
songs = db.getAllObj();//获取所有的对象List
db.saveObj(song);//存储某个对象
其他操作也跟正常的SQLite操作一样,例如删除数据库表中id为1的对象
则:db.delete(tableName , "id=?", new String[] {“1”}); 即可。
我们在做开发写代码的时候,很大可能会用到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”}); 即可。
相关文章推荐
- 有关于TextView 利用到在内容中添加图片的效果
- Android应用发布后的统计——百度移动统计的应用
- Android:Content Provider数据共享
- Android PopupWindow
- Android开发经验总结
- Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory Android
- android cordova h5总结
- Intent实现页面的跳转和返回
- Android EditText的设置以及软键盘的各种设置
- android 日志打印器 LogUtil
- Android Studio查看签名文件sha1和MD5的方法
- Android初识-Intent用法进阶篇
- Android大图片裁剪
- Android Action Bar 详解篇
- Android RecyclerView 梦幻般的控件 使用解析(一)
- Android剪切板(ClipboardManager) 复制文本
- Android实战 - 音心播放器 (MusicActivity ,MusicNotification,MusicService总结)
- android ListView上拉加载更多
- Android中SharedPreferences实现
- android目录简介