Проблема обновления изображений Ormlite - PullRequest
0 голосов
/ 21 февраля 2012

Я использую ormlite для Android, у меня есть следующая модель

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

Проблема в том, что можно обновить изображение, используя первый способ, но не используя второй, т. Е. При использовании второго способа изображение неправильно сохраняется в базе данных. Я использовал sqliteviewer, чтобы проверить, хранится ли изображение, и это не помогает последним методом. Есть ли лучший подход для обновления байтового массива (изображения) с помощью "ormlite"?

1 Ответ

0 голосов
/ 21 февраля 2012

Что вам не хватает, так это использование функции SelectArg из ORMLite . Вы используете SelectArg, когда видите, чтобы указать аргумент SQL ?. Таким образом, ваш код превратится в:

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

SelectArg также позволяет вам создать оператор обновления и затем установить аргумент несколько раз, прежде чем выполнять оператор. Поэтому, если вы постоянно обновляете определенное поле, вам не нужно создавать один и тот же оператор обновления несколько раз.

...