问题是我有一个表产品,我的更新脚本不能正常工作。这一切都是假的。
Product.class
@DatabaseTable(tableName = "Product")
public class Product {
@DatabaseField(index = true, generatedId = true)
private int productId;
@DatabaseField
private String name;
@DatabaseField
private int quantity;
//@DatabaseField(canBeNull = true)
//private Integer categorie;
//http://logic-explained.blogspot.com.ar/2011/12/using-ormlite-in-android-projects.html
@DatabaseField
private int categorie;
//@ForeignCollectionField
//private ForeignCollection<Categorie> itemsCategorie;
@DatabaseField
private String description;
@DatabaseField
private String photo;
Product() {
}
public Product(int productId, String name, int quantity, int categorie, String description, String photo) {
super();
this.productId = productId;
this.name = name;
this.quantity = quantity;
this.categorie = categorie;
this.description = description;
this.photo = photo;
}
public void setDescription(String description) {
this.description = description;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return description;
}
public void setAddress(String address) {
this.description = address;
}
public int getProductId() {
return productId;
}
public void setProductId(int productId) {
this.productId = productId;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public int getCategorie() {
return categorie;
}
public void setCategorie(int categorie) {
this.categorie = categorie;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public CharSequence getDesc() {
return null;
}
}
我的脚本updateProduct
public boolean updateProduct(Product p) {
boolean ret = false;
if (productDao != null) {
try {
productDao = getDao(Product.class);
UpdateBuilder<Product, Integer> updateBuilder = productDao
.updateBuilder();
updateBuilder.updateColumnValue("name", p.getName());
updateBuilder.updateColumnValue("quantity", p.getQuantity());
updateBuilder.updateColumnValue("categorie", p.getCategorie());
updateBuilder.updateColumnValue("description", p.getDesc());
updateBuilder.updateColumnValue("photo", p.getPhoto());
// but only update the rows where the description is some value
updateBuilder.where().eq("productId", p.getProductId());
// actually perform the update
String str = updateBuilder.prepareStatementString();
// UPDATE `Product` SET `name` = 'gcd' ,`quantity` = 1
// ,`categorie` = 1 ,`description` = ? ,`photo` = '' WHERE
// `productId` = 0
if (productDao.update(updateBuilder.prepare()) != 1) {
ret = false;
} else {
productDao.refresh(p);
ret = true;
}
} catch (Exception e) {
ret = false;
e.printStackTrace();
}
}
return ret;
}
然后我用这样的函数调用它,但总是返回false:(
public boolean updateProduct(Product p) {
boolean ret = false;
try {
ret = getHelper().updateProduct(p);
} catch (Exception e) {
e.printStackTrace();
ret =false;
}
return ret;
}
我可以创建和删除,但我无法更新。我尝试了一切。 如果你花点时间回答我的问题,我将不胜感激。
答案 0 :(得分:1)
对于其他开发人员,如果您面对这样的问题,则应确保该表必须具有身份密钥。
@DatabaseTable(tableName = "User")
public class User {
@DatabaseField(generatedId = true)
public int id;
@DatabaseField
public String ServiceUserId;
@DatabaseField
public boolean IsActive;
@DatabaseField
public String FirstName;
@DatabaseField
public String LastName;
@DatabaseField
public String Key;
@DatabaseField
public String Email;
}
答案 1 :(得分:0)
解决方案是 只需从DB获取对象产品的实例然后修改为最终发送到updateProduct方法。
例如,首先我需要先创建任何方法来获取ID
的对象 // get the Instance calling to the getProductByID
Product p = getHelper().getProductByID(p.getId())
//modify any value of the product
p.setFirstName("asd");
//call the update
ret = getHelper().updateProduct(p);
然后我的对象被更新。
答案 2 :(得分:0)
注意对象ID(应该相同),并使用natif函数update(Product);
答案 3 :(得分:0)
在这种情况下,您必须覆盖equals和hashCode。