2016-01-05 2 views
1

Моих определений столбцов для таблицы Магазинов:Android/Ormlite - обновление только выбранные поля

@DatabaseField(canBeNull = false, columnName = C_SHOP_ID, index=true, id=true) 
private String shopId; 

@DatabaseField(dataType = DataType.BYTE_ARRAY, canBeNull = false, columnName = C_SHOP_ICON) 
private byte[] shopIcon; 

@DatabaseField(canBeNull = false, columnName = C_SHOP_DETAILS) 
private String shopDetails; 

@DatabaseField(canBeNull = false, columnName = C_SHOP_NAME) 
private String shopName; 

@DatabaseField(canBeNull = false, columnName = C_SHOP_SHORT_DESCRIPTION) 
private String shopShorDescription; 

Далее, чтобы выполнить обновление (или вставить) новая строка:

public void addOrUpdateShop(Shops c) 
{ 
    try 
    { 
     //getHelper().getShopItemsDao().create(c); 
     getHelper().getShopItemsDao().createIfNotExists(c); 
    } 
    catch (SQLException e) 
    { 
     e.printStackTrace(); 
    } 
} 

Иногда, не все полей потребность которые будут изменены при выполнении обновления. Например, shopDetails или shopIcon (большое изображение блоба) не должны обновляться и оставить как есть. Это указывается конкретным значением поля. Например, если c.shopDetails не должен быть обновлен в базе данных, она имеет значение "no change"

Теперь мне нужно сделать ряд обновлений, но каждый раз, когда c.ShopDetails равна "no change", shopDetails поле в моей таблице не должно быть обновлена, поэтому поле значение в таблице не будет изменено. Однако следует обновлять другие поля.

Без ormlite мне нужно будет написать все соответствующие запросы на обновление, чтобы исключить некоторые столбцы из инструкции обновления, поскольку это необходимо. Есть ли простой способ сделать то же самое с ormlite (без написания сырых sql-запросов)?

Кроме того, мне нужно, чтобы создать новую строку, если не существует (так, обновление строитель не очень хорошо для этого, так как я могу только обновить существующие поля с ним)

ответ

0

Представьте, что вы должны обновить shopeName из магазин, где идентификатор магазина равен 25.

Затем сначала вам нужно вернуть объект Shop, где магазин id = 25 Тогда, если есть такой объект, представьте, что он восстановил объект Shpops как oldShopObject.

Теперь вы создаете новый объект магазин названный как newShopObject следующим

Shops newShopObject = new Shpos(); 
newShopObject.shopId = oldShopObject.shopId; 
newShopObject.shopIcon = oldShopObject.shopIcon; 
newShopObject.shopDetails = oldShopObject.shopDetails; 
newShopObject.shopeName = <set your new shop name here>; 
newShopObject.shopShortDescription = oldShopObject.shopShortDescription; 

Теперь вы можете сохранить этот newShopObject. Обновите код следующим образом и попробуйте,

public void addOrUpdateShop(Shops newShopObject) 
{ 
try 
{ 
    getHelper().getShopItemsDao().createOrUpdate(newShopObject); 
} 
catch (SQLException e) 
{ 
    e.printStackTrace(); 
} 
} 

Read here

+0

Извините, вы можете это объяснить? Как исключить некоторые поля из обновлений и какая разница с моим предыдущим решением? – user1209216

+0

Я обновил anwser –

+0

Хорошо, но все же обновление заменяет все поля в строке, с теми же значениями + только один из них (имя) с новым значением. Это не то, что я хочу, я хочу обновить только выбранное поле, а не заменять других теми же значениями. Кроме того, я хочу избежать выбора старого объекта. – user1209216

Смежные вопросы