2012-02-21 19 views
0

は、私がモデル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

答えて

0

SelectArg featureORMLiteです。 SQL ?引数を指定したときは、SelectArgを使用します。だからコードがに変わるでしょう:

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

SelectArgもあなたが文を実行する前に複数回、あなたの更新ステートメントを構築し、引数を設定することができます。したがって、特定のフィールドを繰り返し更新する場合、同じ更新ステートメントを複数回構築する必要はありません。