2014-03-27 123 views
1

我有这个课,我在sqlite中创建我的表,everthing工作得很好,在我的项目中,您可以插入,删除和更新学生和教师的信息,但现在我想保存一个图像,这意味着除了保存学生或老师的信息以外,我还想保存一张图片,请有人帮助我吗?你不知道如何做到这一点。在sqlite Android中保存图像?

package MyClasses;

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 

public class sqliteClass extends SQLiteOpenHelper{ 

String sqlAlumno = "CREATE TABLE Alumno(id integer primary key,nombre varchar(30),apellidos varchar(25),especialidad varchar(25),email varchar(25))"; 

String sqlProfe = "CREATE TABLE Profe(id integer primary key,nombre varchar(30),apellidos varchar(25),especialidad varchar(25),email varchar(25))"; 

    public sqliteClass(Context context, String name, CursorFactory factory, 
      int version) { 
     super(context, name, factory, version); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(sqlAlumno); 
     db.execSQL(sqlProfe); 

    } 

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


    } 

} 

回答

1

总体而言:

blob类型添加一列,说image blob,为您创建表查询

插入图像

ContentValues cv = new ContentValues(); 
ByteArrayOutputStream out = new ByteArrayOutputStream(); 
yourBitmap.getBitmap().compress(Bitmap.CompressFormat.PNG, 100, out); 
cv.put(KEY_IMG, out.toByteArray()); 

还原图像
使用Cursor#getBlob()方法获取图像并存储我吨一byte[]阵列

byte[] blob = cursor.getBlob(cur.getColumnIndex("image")); 

转换字节[]为位图:

Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0, blob.length); 

但是我想在数据库中大级别存储的图像是不值钱的,因为SQLite的空间有限,所以存储图像路径有价值。

0

它通常被认为是一种糟糕的形式来保存像数据库中的图像的二进制数据。在大多数情况下,出于某些技术原因,它实际上最终会损坏数据库的性能。相反,将要缓存的图像保存到SD卡,并将这些图像的文件路径存储在数据库中。

总是养成保存图像路径到数据库的习惯。对于列表视图,请确保只使用这些图像的缩略图。这将帮助您快速加载列表中的这些图像。

long selectedImageUri = ContentUris.parseId(Uri.parse(anniEntry.getUri())); Bitmap bm = MediaStore.Images.Thumbnails.getThumbnail( mContext.getContentResolver(), selectedImageUri,MediaStore.Images.Thumbnails.MICRO_KIND, null);

这里anniEntry.getUri()是图像uri.Now,把它放在第二code.U可根据需要

得到微或迷你缩略图