如何在android中的sq-lite中编写或插入函数和更新

时间:2015-07-03 11:48:03

标签: android sqlite

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个课程用于桌子而另一个用于水。请告诉

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

如果记录已经存在,它将插入记录,否则它将更新。