2012-02-21 2 views
0

J'utilise ormlite pour android, j'ai modèle suivantOrmlite image problème de mise à jour

@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; 

Il est possible de mettre à jour une image comme suit:

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}); 

Mais il existe une méthode ormlite à mettre à jour le tableau d'octets autre que le code suivant:

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

Le problème est qu'il est possible de mettre à jour l'image u chantez l'ancienne façon mais n'utilisez pas cette dernière méthode, c'est-à-dire que lorsque vous utilisez cette dernière méthode, l'image n'est pas correctement stockée dans la base de données. J'ai utilisé le sqliteviewer pour vérifier si l'image est stockée, et il échoue avec la dernière méthode. est-il une meilleure approche pour mettre à jour le tableau d'octets (image) en utilisant "ormlite"?

+0

Ma réponse a-t-elle été utile? J'apprécierais un +1 et un accepter si c'est le cas. – Gray

Répondre

0

Ce qui vous manque est l'utilisation du SelectArg feature de ORMLite. Vous utilisez SelectArg lorsque vous avez vu pour spécifier un argument SQL ?. Donc, votre code se transformerait en:

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

SelectArg vous permet également de construire votre déclaration de mise à jour, puis définissez plusieurs fois l'argument avant d'exécuter l'instruction. Ainsi, si vous mettez régulièrement à jour un certain champ, vous n'avez pas besoin de créer plusieurs fois la même instruction de mise à jour.