在SQLite中存储照相机的照片

时间:2017-09-08 14:54:50

标签: android

我在SQLite数据库中为图像和类创建了一个表。 我正在为这张桌子做CRUD而且我已经陷入了获取Image的困境。有谁知道接下来该做什么?图像由相机拍摄。

public class Image
{
private int pid;
private byte[] photoByte;

public Image()
{

}
public Image(byte[] aPhoto)
{
    this.photoByte = aPhoto;
}

public void set_id(int pid)
{
    this.pid = pid;
}
public int getId()
{
    return pid;
}

public void setPhoto(byte[] aPhoto)
{
    this.photoByte = aPhoto;
}
public byte[] getPhoto()
{
    return photoByte;
}

}

数据库的一部分:

        String CREATE_PHOTO_TABLE = "CREATE TABLE IF NOT EXISTS " + PRODUCT_PHOTO + " (" + KEY_PID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + KEY_PHOTO + " BLOB" + ")";
    db.execSQL(CREATE_PHOTO_TABLE);

public void savePhoto(byte[] image)
{

    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(KEY_PHOTO, image);
    long newId = db.insert(PRODUCT_PHOTO, null, values);
}
public byte[] getPhoto()
{
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(PRODUCT_PHOTO, new String[]{KEY_PID})
 ???????
}

2 个答案:

答案 0 :(得分:0)

我强烈建议您存储图像路径。但是如果你必须存储BLOB,那么你需要:

  1. 从光标获取bytes [],如此docs

    中所述

    byte[] value = cursor.getBlob(cursor.getColumnIndex(name));

  2. 根据需要使用byte [](写入文件,位图等)

答案 1 :(得分:0)

来吧,乔安娜想把照片存放在Db上,她请求帮助,不要因为她的解决方案而受到骂。

解决方案很简单,您只需要返回Blob字节[]

public byte[] getPhoto()
{
    byte[] returnValue;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(PRODUCT_PHOTO, new String[]{KEY_PID});
    if(cursor.MoveFirst()) {
      returnValue = cursor.getBlob(0);
    }
    cursor.close();
    db.close();

    return returnValue;
}

我将图像存储在数据库中,我将它们存储在我的Android应用程序和MySQL数据库中(我通过web服务将byte []发送到MySQL数据库) 我的android应用程序图像数据库每天都被清除,所以就像临时存储一样,但在我的MySQL Db上,我有超过30k(并且还在增长)的图像记录,我没有任何问题保存或检索来自我的网络解决方案。