2012-02-21 45 views
0

我使用ormlite为Android,我有以下型号Ormlite图片更新问题

@DatabaseTable(tableName = DatabaseConstants.TABLE_ARTICLE) 
public class ArticleModel { 

@DatabaseField(generatedId = true, columnName = DatabaseConstants.ARTICLE_ID) 
public int id; 
@DatabaseField(columnName = DatabaseConstants.ARTICLE_NAME) 
public String name = ""; 

@DatabaseField(columnName = DatabaseConstants.ARTICLE_IMAGE_URL) 
public String imageUrl = ""; 

@DatabaseField(columnName = DatabaseConstants.ARTICLE_IMAGE,dataType= DataType.BYTE_ARRAY) 
public byte[] image; 

有可能如下更新的图像:

ContentValues cv = new ContentValues(); 
cv.put(DatabaseConstants.ARTICLE_IMAGE, UtilBitmap.bitmapToByteArray(bitmap)); 

SQLiteDatabase sqLiteDatabase = this.baseHelper.getWritableDatabase(); 
sqLiteDatabase.update(DatabaseConstants.TABLE_ARTICLE, cv,   
DatabaseConstants.ARTICLE_MOBILE_IMAGE_URL + "= ?", new String[]{url}); 

不过是有一个ormlite方法更新到除以下代码以外的字节数组:

updateBuilder.updateColumnValue(DatabaseConstants.ARTICLE_IMAGE,imageBytes); 
updateBuilder.where().eq(DatabaseConstants.ARTICLE_MOBILE_IMAGE_URL, url); 

问题是可以更新图像u歌唱前一种方式,但不采用后一种方式,即使用后一种方式时,图像未正确存储在数据库中。我使用sqliteviewer来检查图像是否存储,并使用后一种方法失败。有没有更好的方法来更新字节数组(图像)使用“ormlite”?

+0

我的回答有些帮助吗?如果是的话,我会很感激+1和接受。 – Gray 2012-02-25 18:54:08

回答

0

你缺少的是使用ORMLiteSelectArg feature。当您看到指定SQL ?参数时,您使用SelectArg。所以,你的代码将变成:

updateBuilder.updateColumnValue(DatabaseConstants.ARTICLE_IMAGE, 
    new SelectArg(imageBytes)); 
updateBuilder.where().eq(DatabaseConstants.ARTICLE_MOBILE_IMAGE_URL, url); 

SelectArg还允许你建立你的更新语句,然后多次设置参数执行SQL语句之前。因此,如果您反复更新某个字段,则不必多次构建相同的更新语句。