Sqlite open helper вставить еще обновление?

Я хочу успешно вставить данные

Вот мой код:

 public void insertData(String strTableName,
            ArrayList<HashMap<String, String>> arrListproductdatabase) {
        db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        for (int i = 0; i < arrListproductdatabase.size(); i++) {
            // cv.put(columnName, arrListOfRecord.get(i).get("name"));
            cv.put(columnproductname,
                    arrListproductdatabase.get(i).get("product"));
            cv.put(columnproductprice,
                    arrListproductdatabase.get(i).get("price"));
            cv.put(columnproductquantity,
                    arrListproductdatabase.get(i).get("quantity"));
            cv.put(columnproductid,
                    arrListproductdatabase.get(i).get("productID"));
            cv.put(columnresturantID,
                    arrListproductdatabase.get(i).get("resturantID"));

            db.insert(strTableName, null, cv);

        }

Я хочу, чтобы, когда мне нужно снова нажать кнопку «Добавить», в этот раз он должен проверить, вставлен ли продукт уже, и в этом состоянии он должен обновиться и все.

Я не хочу создавать повторяющееся значение.

Любая помощь будет оценена по достоинству!


person Gomathi    schedule 14.03.2013    source источник
comment
правильно объясните свой вопрос, чтобы мы могли вам помочь   -  person Auto-Droid ツ    schedule 14.03.2013
comment
Это логично, просто проверьте все записи базы данных, добавляя в if (условие), а в другой части напишите свой запрос на обновление, вы найдете много синтаксиса для вставки и обновления   -  person Auto-Droid ツ    schedule 14.03.2013
comment
да, но я храню массив, тогда как вы можете опубликовать его имя в помощнике по базе данных?   -  person Gomathi    schedule 14.03.2013
comment
пройдите массив в цикле for и используйте функцию сравнения java, чтобы проверить, совпадают ли данные   -  person Auto-Droid ツ    schedule 15.03.2013
comment
по моему мнению, вам нужно получить значение из arraylist, тогда решение простое: пройти через arraylist в цикле for и использовать функцию сравнения java, чтобы проверить, совпадают ли данные. если какой-либо комментарий о проблеме ниже, он уведомит меня   -  person Auto-Droid ツ    schedule 15.03.2013


Ответы (3)


вы можете проверить наличие различных значений в db. пожалуйста, перейдите по ссылке, чтобы получить более подробную информацию

Android проверяет повторяющиеся значения перед вставкой данных в базу данных

person krishna    schedule 14.03.2013

Установите поле «Продукт» в качестве уникального ключа. Поэтому, когда из стандартного insert поступает повторяющееся значение, он просто возвращает -1, и сообщение об ошибке будет проглочено.

Вы можете управлять поведением, используя insertWithOnConflict (String table, String nullColumnHack, ContentValues initialValues, int conflictAlgorithm), где вы также указываете алгоритм конфликта, который может принимать значения:

CONFLICT_ABORT
CONFLICT_FAIL
CONFLICT_IGNORE
CONFLICT_REPLACE
CONFLICT_ROLLBACK

См. справочник для описания типов разрешения конфликтов.

Также есть updateWithOnConflict

person Sadeshkumar Periyasamy    schedule 14.03.2013

Вы можете сделать это следующим образом:

public boolean checkProduct(String product){

        // shold open database here
        Cursor mCursor = 
                db.query(true, DATABASE_TABLE, null, "product='" + product+"'", null, null, null, null, null);
        if(mCursor != null){
            mCursor.close();
            // shold close database here
            return true;
        }
        // shold close database first here also
        return false;
    }

Надеюсь, это помогло вам.

person AwadKab    schedule 14.03.2013
comment
Добро пожаловать. (Если это помогло вам, примите ответ, чтобы помочь другим). - person AwadKab; 16.03.2013
comment
Использование product='+product+' позволяет проводить атаки SQLInjection. Вместо этого вы должны использовать product = ? а затем поставьте продукт в следующем параметре - person BoredAndroidDeveloper; 17.12.2013