android 数据库存取图片

Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很多数据库语言里,处理大字段都是不容易的,像图片这样的文件放在数据库里会有问题:对数据库的读写速度永远赶不上文件系统的处理速度,使数据库变得巨大;但也有很多人认为像图片这样的数据存放在数据库中也有好处:易于备份,且备份速度绝对比备份文件快,比较容易数据迁移等等。其实这两种方法都有优缺点,具体使用哪种方法要视情况而定。个人倾向于使用数据库存取图片,因为个人认为存到数据库里的数据不会因外部数据的变化而丢失改变,比如你拍照获得一张图片,如果是将路径存到数据库,当这张照片被删除之后,下次读取数据库就得不到想要的结果了。接下来详细介绍数据库存取图片的方法:

  1.从资源中获取Bitmap对象

1     Resources res = getResources();
2     Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);

  2.把图片转换成字节

1 public byte[] img(int id)
2 {
3      ByteArrayOutputStream baos = new ByteArrayOutputStream();
4      Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(id)).getBitmap();
5      bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
6      return baos.toByteArray();
7 }

  3.在数据库中插入图片

//在数据库创建时,图片字段的数据类型存储为 BLOB数据库插入操作
public void onCreate(SQLiteDatabase db)
{
    String sql = "create table " + TB_NAME + " ( " + ID + " integer primary key , " + IMAGE + " BLOB ) ";
    db.execSQL(sql);
} 

//将图片一字节形式存储数据库读取操作
public long insert(byte[] img)
{
    SQLiteDatabase db = getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(IMAGE, img);
    long result = db.insert(TB_NAME, null, cv);
    return result;
}

  4.获取存入数据库的图片(Bitmap)

public Bitmap getBmp(int position)
{
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = select(TB_NAME);
    cursor.moveToPosition(position);
    byte[] in = cursor.getBlob(cursor.getColumnIndex(IMAGE));
    Bitmap bmpout = BitmapFactory.decodeByteArray(in, 0, in.length);
    return bmpout;
}

  //imgView.setImageBitmap(bm);

  5.转换获取的图片(Bitmap)为Drawable

1 public Drawable chage_to_drawable(Bitmap bp)
2 {
3     //因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
4     Bitmap bm=bp;
5     BitmapDrawable bd= new BitmapDrawable(getResource(), bm);
6     return bd;
7 }

时间: 2024-10-25 08:13:10

android 数据库存取图片的相关文章

复习课程jdbc:使用配置文件properties进行连接数据库,数据库存取图片,批处理,时间戳,事物回滚等等

使用配置文件properties进行连接数据库 首先创建一个file自定义文件名,但是后缀名必须改为.properties(不分大小写):如config.properties: 然后双击config.properties进行编辑:此文件数据是根据键值对来存储的:我们可以把连接数据库的一些连接字符串存储在此文件里:然后用的时候直接读配置文件,到时候更换的时候方便移植和修改. name                                                          

小谈c#数据库存取图片的方式

代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> /// <summary> /// 上传图片 /// </summary> /// <param name="FUSShopURL">FileUpload对象</param> /// <param name="Upl

Java 操作MySQL数据库存取图片以及其它类型文件

一.需要注意的一个问题 1.当数据库字段为blob类型时,必须使用PreparedStatement中的setBinaryStream(int,InputStream,int)方法: 2.当数据库字段为longblob类型时,必须使用PreparedStatement中的setBinaryStream(int,InputStream,long)方法. 否则就会抛出如题的错误: Exception in thread "main" java.lang.AbstractMethodErro

数据库存取图片

private void button1_Click(object sender, EventArgs e) //窗体打开文件图片 { openFileDialog1.Filter = "@.jpg|*.jpg|all files|*.*"; DialogResult dr = openFileDialog1.ShowDialog(); if (dr == DialogResult.OK) { FileStream fs = new FileStream(openFileDialog1

数据库存取图片(只是自己学习的记录不保证正确性)

第一步://获取当前选择的图片 this.pictureBox1.Image = Image.FromStream(this.openFileDialog1.OpenFile()); //获取当前图片的路径 string path = openFileDialog1.FileName.ToString(); //将制定路径的图片添加到FileStream类中 FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);

(转载)数据库存取图片并在MVC3中显示在View中

简介:在有些情况下需要将图片转换为二进制流存放在数据库中,当显示时再从数据库中读出来显示在界面上. 本文简单介绍数据库中图片的存取方法,并在MVC3中显示在Razor视图中.仅供初学者参考学习. 1. 将图片转换为二进制流 /// <summary> /// convert a picture file to byte array /// </summary> public byte[] GetBytesFromImage(string filename) { FileStream

Android——数据存储(四种方式之一)SharedPrefereces

Android--数据存储(四种方式) 1.SharedPrefereces   轻量级.XML  存储文件名,数据保存在data/data/basepackage/shared_prefs/myopt.xml中   实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default)   2.读写SD卡  SD的根目录  适用于数据流读写 3.SQLite  轻量级.dp文件多用于手机

[Android]数据篇 --- SharedPreferences

转载请标注:转载于http://www.cnblogs.com/Liuyt-61/p/6637515.html --------------------------------------------------------------- Android数据的四种存储方式: 1.SharedPreferences 2.SQLite 3.Content Provider 4.File ----------------------分割线--------------------------------

Android数据存储(2):Internal Storage

Android数据存储的第二种形式是Internal Storage,即内部存储. 内存存储的特点是存储的是私有数据,其存储位置是在手机内存,一种是普通的文件存储,另一种是文本或图片在内存的缓存. 内部缓存的存放位置/data/data/包名/files 或 /data/data/包名/cache 1.create and write a private file to the internal storage: 步骤: 1)调用 openFileOutput()方法,返回的是一个FileOut