public void insertData(String cateogry, String status, String feedback,
String date, Bitmap bitmap) {
db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(CATEGORY, cateogry);
cv.put(STATUS, status);
cv.put(FEEDBACK, feedback);
cv.put(IMAGE, Utility.getBytes(bitmap));
cv.put(DATE, date);
db.insert(INFR_TABLE, CATEGORY, cv);
}
public void updateData(String cateogry, String status, String feedback,
String date, Bitmap bitmap)
{
db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(CATEGORY, cateogry);
cv.put(STATUS, status);
cv.put(FEEDBACK, feedback);
cv.put(IMAGE, Utility.getBytes(bitmap));
cv.put(DATE, date);
db.update(INFR_TABLE, cv, "cateogry="+cateogry, null);
}
这是更新并在sqlite中插入函数我想要当cateogry行在那里alredy然后用其他值更新它,如果没有然后插入。我这样打电话:
有关(表)
String data[] = dh.getAllCategory();
if (Arrays.asList(data).contains("Table")) {
dh.updateData("Table", t, j, "25.5.2014", BitmapFactory
.decodeResource(getResources(), R.drawable.ic_launcher));
}
else {
dh.insertData("Table", t, j, "25.5.2014", BitmapFactory
.decodeResource(getResources(), R.drawable.ic_launcher));
}
for(water):
String data[] = dh.getAllCategory();
// dh.deleteitem(11);
if (Arrays.asList(data).contains("Table")) {
dh.updateData("Water", t, j, "25.5.2014", BitmapFactory
.decodeResource(getResources(), R.drawable.ic_launcher));
}
else
{
dh.insertData("Water", t, j, "25.5.2014", BitmapFactory
.decodeResource(getResources(), R.drawable.ic_launcher));
}
但每次创建新行和副本时请帮助我在哪里做错了我们有2个课程用于桌子而另一个用于水。请告诉
答案 0 :(得分:1)
public void insertData(String id, String cateogry, String status,
String feedback, String date, Bitmap bitmap) {
db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(ID, id);
cv.put(CATEGORY, cateogry);
cv.put(STATUS, status);
cv.put(FEEDBACK, feedback);
cv.put(IMAGE, Utility.getBytes(bitmap));
cv.put(DATE, date);
db.insertWithOnConflict(INFR_TABLE, ID, cv,
SQLiteDatabase.CONFLICT_REPLACE);
}
尝试这个并且更新我认为它应该工作..
答案 1 :(得分:0)
您可以使用insertWithOnConflict将维护保存到单个块中,而不是维护到两个代码块。
public long insertWithOnConflict(String table,String nullColumnHack, ContentValues initialValues,int conflictAlgorithm)
在conflictAlgorithm中,您可以指定在插入记录时发生冲突的内容,您可以指定CONFLICT_REPLACE
根据文件,
当发生UNIQUE约束违规时,预先存在的行 导致约束违反被删除之前插入或 更新当前行。因此总是发生插入或更新。该 命令继续正常执行。没有错误返回。
所以你可以指定为
database.insertWithOnConflict(tablename, columnHack, values, SQLiteDatabase.CONFLICT_REPLACE);
如果记录已经存在,它将插入记录,否则它将更新。