android bitmap保存sql,Android Bitmap保存到SQLite

public class ImageDB extends SQLiteOpenHelper {

/**数据库版本号**/

private final static int DATABASE_VERSION = 1;

/**数据库名**/

private final static String DB_NAME = "image_db";

/**表名**/

private String TABLE_IMAGE = "image_data";

public String T_ID = "_id";//字段名

public String T_BLOB = "T_BLOB";//字段名

/**创建表SQL 字符串**/

private String TABLE_IMAGE_CREATE = "Create table " + TABLE_IMAGE + "(" + T_ID

+ " INTEGER DEFAULT '1' NOT NULL PRIMARY KEY AUTOINCREMENT ,"

+ T_BLOB + " BLOB );";

/**表列数据集合**/

private String[] col = { T_ID, T_BLOB };

/**ImageDB对象构造方法**/

public ImageDB(Context context) {

super(context, DB_NAME, null, DATABASE_VERSION);

}

public ImageDB(Context context, String name, CursorFactory factory, int version) {

super(context, name, factory, version);

}

/**创建数据**/

public Long createData(Bitmap bmp) {

ContentValues initValues = new ContentValues();

Long id = null;

ByteArrayOutputStream os = new ByteArrayOutputStream();

/**

* Bitmap.CompressFormat.JPEG 和 Bitmap.CompressFormat.PNG

* JPEG 与 PNG 的是区别在于 JPEG是有损数据图像,PNG使用从LZ77派生的无损数据压缩算法。

* 这里建议使用PNG格式保存

* 100 表示的是质量为100%。当然,也可以改变成你所需要的百分比质量。

* os 是定义的字节输出流

*

* .compress() 方法是将Bitmap压缩成指定格式和质量的输出流

*/

bmp.compress(Bitmap.CompressFormat.PNG, 100, os);

initValues.put(T_BLOB, os.toByteArray());//以字节形式保存

SQLiteDatabase db = getDatabaseWrit();

id = db.insert(TABLE_IMAGE, null, initValues);//保存数据

db.close();

Log.i("Image ", "create done.");

return id;

}

public List> getData() {

List> list = null;

SQLiteDatabase db = getDatabaseRead();

Cursor cursor = db.query(TABLE_IMAGE, col, null, null, null, null, null);//数据的查询

HashMap bindData = null;

list = new ArrayList>();

for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {

bindData = new HashMap();

bindData.put(T_ID, cursor.getLong(0));

/**得到Bitmap字节数据**/

byte[] in = cursor.getBlob(1);

/**

* 根据Bitmap字节数据转换成 Bitmap对象

* BitmapFactory.decodeByteArray() 方法对字节数据,从0到字节的长进行解码,生成Bitmap对像。

**/

Bitmap bmpout = BitmapFactory.decodeByteArray(in, 0, in.length);

bindData.put(T_BLOB, bmpout);

list.add(bindData);

}

cursor.close();

db.close();

Log.i("Image ", "get a Bitmap.");

return list;

}

public void delete() {

SQLiteDatabase db = getDatabaseWrit();

db.delete(TABLE_IMAGE, null, null);//数据的删除

db.close();

Log.i("Image ", "delete all data.");

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(TABLE_IMAGE_CREATE);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

String sql = " drop table " + TABLE_IMAGE;

db.execSQL(sql);

onCreate(db);

}

private SQLiteDatabase getDatabaseRead() {

return this.getReadableDatabase();

}

private SQLiteDatabase getDatabaseWrit() {

return this.getWritableDatabase();

}

}

点击打开链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将位图保存SQLite数据库,需要执行以下步骤: 1. 将位图转换为字节数组: ```java ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); ``` 2. 打开或创建SQLite数据库,创建一个表来存储图像数据: ```java SQLiteDatabase database = openOrCreateDatabase("YourDatabaseName", MODE_PRIVATE, null); String createTableQuery = "CREATE TABLE IF NOT EXISTS Images (Id INTEGER PRIMARY KEY AUTOINCREMENT, Image BLOB)"; database.execSQL(createTableQuery); ``` 3. 将字节数组插入到数据库: ```java ContentValues values = new ContentValues(); values.put("Image", byteArray); database.insert("Images", null, values); ``` 4. 关闭数据库连接: ```java database.close(); ``` 这样,位图就会以字节数组的形式保存SQLite数据库的一个表。如果你想从数据库检索位图数据,可以使用以下代码: ```java SQLiteDatabase database = openOrCreateDatabase("YourDatabaseName", MODE_PRIVATE, null); String selectQuery = "SELECT Image FROM Images WHERE Id = ?"; Cursor cursor = database.rawQuery(selectQuery, new String[]{String.valueOf(imageId)}); if (cursor.moveToFirst()) { byte[] byteArray = cursor.getBlob(cursor.getColumnIndex("Image")); Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); // 在这里使用位图 } cursor.close(); database.close(); ``` 请确保替换代码的 "YourDatabaseName" 为你的数据库名称,并根据需要修改其他表名或字段名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值