Android Bitmap保存到SQLite

来源:互联网 发布:机械模型制作软件 编辑:程序博客网 时间:2024/06/08 11:57
  1. public class ImageDB extends SQLiteOpenHelper {  
  2. /**数据库版本号**/  
  3. private final static int DATABASE_VERSION = 1;  
  4. /**数据库名**/  
  5. private final static String DB_NAME = "image_db";  
  6.   
  7. /**表名**/  
  8. private String TABLE_IMAGE = "image_data";  
  9. public String T_ID = "_id";//字段名  
  10. public String T_BLOB = "T_BLOB";//字段名  
  11. /**创建表SQL 字符串**/  
  12. private String TABLE_IMAGE_CREATE = "Create table " + TABLE_IMAGE + "(" + T_ID  
  13. " INTEGER DEFAULT '1' NOT NULL PRIMARY KEY AUTOINCREMENT ,"  
  14. + T_BLOB + " BLOB );";  
  15. /**表列数据集合**/  
  16. private String[] col = { T_ID, T_BLOB };  
  17.   
  18. /**ImageDB对象构造方法**/  
  19. public ImageDB(Context context) {  
  20. super(context, DB_NAME, null, DATABASE_VERSION);  
  21. }  
  22.   
  23. public ImageDB(Context context, String name, CursorFactory factory, int version) {  
  24. super(context, name, factory, version);  
  25. }  
  26.   
  27. /**创建数据**/  
  28. public Long createData(Bitmap bmp) {  
  29. ContentValues initValues = new ContentValues();  
  30. Long id = null;  
  31.   
  32. ByteArrayOutputStream os = new ByteArrayOutputStream();  
  33. /** 
  34. * Bitmap.CompressFormat.JPEG 和 Bitmap.CompressFormat.PNG 
  35. * JPEG 与 PNG 的是区别在于 JPEG是有损数据图像,PNG使用从LZ77派生的无损数据压缩算法。 
  36. * 这里建议使用PNG格式保存 
  37. * 100 表示的是质量为100%。当然,也可以改变成你所需要的百分比质量。 
  38. * os 是定义的字节输出流 
  39.  
  40. * .compress() 方法是将Bitmap压缩成指定格式和质量的输出流 
  41. */  
  42. bmp.compress(Bitmap.CompressFormat.PNG, 100, os);  
  43.   
  44. initValues.put(T_BLOB, os.toByteArray());//以字节形式保存  
  45.   
  46. SQLiteDatabase db = getDatabaseWrit();  
  47. id = db.insert(TABLE_IMAGE, null, initValues);//保存数据  
  48. db.close();  
  49.   
  50. Log.i("Image ""create done.");  
  51. return id;  
  52. }  
  53.   
  54. public List<Map<String, Object>> getData() {  
  55.   
  56. List<Map<String, Object>> list = null;  
  57.   
  58. SQLiteDatabase db = getDatabaseRead();  
  59. Cursor cursor = db.query(TABLE_IMAGE, col, nullnullnullnullnull);//数据的查询  
  60. HashMap<String, Object> bindData = null;  
  61. list = new ArrayList<Map<String, Object>>();  
  62. for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {  
  63. bindData = new HashMap<String, Object>();  
  64. bindData.put(T_ID, cursor.getLong(0));  
  65. /**得到Bitmap字节数据**/  
  66. byte[] in = cursor.getBlob(1);  
  67. /** 
  68. * 根据Bitmap字节数据转换成 Bitmap对象 
  69. * BitmapFactory.decodeByteArray() 方法对字节数据,从0到字节的长进行解码,生成Bitmap对像。 
  70. **/  
  71. Bitmap bmpout = BitmapFactory.decodeByteArray(in, 0, in.length);  
  72. bindData.put(T_BLOB, bmpout);  
  73.   
  74. list.add(bindData);  
  75. }  
  76. cursor.close();  
  77. db.close();  
  78. Log.i("Image ""get a Bitmap.");  
  79. return list;  
  80. }  
  81.   
  82. public void delete() {  
  83. SQLiteDatabase db = getDatabaseWrit();  
  84. db.delete(TABLE_IMAGE, nullnull);//数据的删除  
  85. db.close();  
  86. Log.i("Image ""delete all data.");  
  87. }  
  88.   
  89. @Override  
  90. public void onCreate(SQLiteDatabase db) {  
  91. db.execSQL(TABLE_IMAGE_CREATE);  
  92. }  
  93.   
  94. @Override  
  95. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  96. String sql = " drop table " + TABLE_IMAGE;  
  97. db.execSQL(sql);  
  98. onCreate(db);  
  99. }  
  100.   
  101. private SQLiteDatabase getDatabaseRead() {  
  102. return this.getReadableDatabase();  
  103. }  
  104.   
  105. private SQLiteDatabase getDatabaseWrit() {  
  106. return this.getWritableDatabase();  
  107. }  
  108.   
0 0
原创粉丝点击