Как проверить данные в SQLite, если они уже существуют, обновить или вставить в Android

Я хочу проверить данные в SQLite, если они уже существуют, можно обновить или вставить. Я проверяю такой код, как я упомянул ниже.

Код:

public long  addmenus(String navigationdrawer,String optionname)
    {
        SQLiteDatabase menus=this.getWritableDatabase();
        try {

        ContentValues values=new ContentValues();
        values.put(HEADER_NAME,navigationdrawer);
        values.put(CHILD_NAME,optionname);

       // menus.insert(TABLE_NAME,null,values);
           // String owner=optionname;

            Cursor cursor = menus.rawQuery("select * from TABLE_NAME where CHILD_NAME ='"+ optionname +"'", null);

        if(cursor.getCount()<1)
        {
            //execute insert query here
            long rows = menus.insert(TABLE_NAME, null, values);
            return rows;
            // return rows inserted.
        }
        else
        {
            //Perform the update query
            String strFilter = "CHILD_NAME" + optionname;
            long updaterow=menus.update(TABLE_NAME,values,strFilter,null);
            return updaterow;
            // return rows updated.
        }

       // menus.close();

    } catch (Exception e) {
        return -1;
    }

        finally {
            if (menus != null)
                menus.close();
        }
    }

Моя деятельность:

Я преобразовал все данные json в строковый объект, а затем вставил в SQLite.

  String productpage=jsonObject.toString();
     db.addmenus(productpage,"Navigationmenus");

Но это не работает. Не удалось вставить в sqlite.

Кто-нибудь решит эту проблему Рад оценить. заранее спасибо


person Nivethitha    schedule 28.04.2016    source источник
comment
Какую ошибку вы получаете? Также похоже, что вы используете TABLE_NAME и CHILD_NAME в качестве строк вместо констант, которыми они кажутся.   -  person Nathanael    schedule 28.04.2016
comment
Имя таблицы - это имя моей таблицы и имеет два дочерних имени столбца и имя заголовка. мне нужно преобразовать все данные json в строку вставки в заголовок столбца, и я дам одно имя параметра, например. меню для одного json, затем второй вариант продукта для другого json   -  person Nivethitha    schedule 28.04.2016
comment
Вы храните JSON в Sqlite? Возможно, вы захотите вместо этого использовать Realm в качестве базы данных.   -  person OneCricketeer    schedule 28.04.2016
comment
я не знаю об этом Царстве, как его использовать   -  person Nivethitha    schedule 28.04.2016


Ответы (5)


Вы можете использовать эту ссылку. Эта ссылка объясняет, как найти адрес электронной почты, доступный в таблице или нет, вы можете изменить имя столбца, таблицу и передать значения в соответствии с ними. В вашем сценарии вы хотите проверить, существует ли имя уже или нет, поэтому вы должны указать, какое имя вы хотите найти. Если имя есть, этот метод вернет true или false. Вы можете проверить, нужно ли вам было вставлять или обновлять ответ.

person Jeevanandhan    schedule 28.04.2016
comment
Я использовал функцию существования данных, которая работает хорошо. Большое спасибо Джива. - person Nivethitha; 28.04.2016

Вы можете использовать insertWithOnConflict() вот так

db.insertWithOnConflict(TABLE, null, yourContentValues, SQLiteDatabase.CONFLICT_REPLACE);
person N J    schedule 28.04.2016
comment
я хочу проверить, где имя параметра условия, если уже или нет. как возможно вставить с конфликтом - person Nivethitha; 28.04.2016
comment
имя является первичным ключом пользователя? - person N J; 28.04.2016
comment
У меня это не работает, он может снова и снова вставлять одни и те же данные json. - person Nivethitha; 28.04.2016

вы должны использовать заменить на

REPLACE INTO table(...) VALUES(...);
person Mark Shen    schedule 28.04.2016
comment
Я не хочу заменять таблицу. Я просто хочу обновить данные, если данные уже существуют в таблице, используя где имя условия = имя параметра - person Nivethitha; 28.04.2016
comment
REPLACE INTO не заменяет таблицу, а просто вставляет или обновляет данные. - person Mark Shen; 28.04.2016
comment
Можете ли вы правильно сказать запрос REPLACE INTO - person Nivethitha; 28.04.2016
comment
rawQuery (заменить значениями TABLE_NAME (CHILD_NAME) (+ optionname+);) - person Mark Shen; 28.04.2016

Вопрос не очень ясен, но я думаю, вы хотите проверить, вставлены ли данные/запись в SQLite или нет. вам нужно будет определить дополнительную переменную long rowInserted insert(), которая возвращает идентификатор строки только что вставленной строки или -1, когда произошла ошибка.

menus.insert(TABLE_NAME, null, values);

long rowInserted = db.insert(AddNewPhysicalPerson, null, newValues);

if(rowInserted != -1)
    Toast.makeText(myContext, "New row added :" + rowInserted, Toast.LENGTH_SHORT).show();
else
    Toast.makeText(myContext, "Something wrong", Toast.LENGTH_SHORT).show();

Обновлено проверить, находятся ли данные в таблице или столбце? для этого вы используете этот код

public boolean Exists(String id){
    Cursor res = getAllData();
    int count=0;
    while (res.moveToNext()){
        String email =res.getString(3);
        if(email.equals(id)){
            count++;
        }
    }
    if(count==0){
        return false;
    } else{
        return true;
    }
}

Во-вторых, вы спрашиваете о json, сначала сохраните все данные во время выполнения любого списка и получите из него строку, после чего вы сможете сохранить в SQlite

try {
        items = jsonObject.getJSONArray("myjsonattribute");
        List<MyAnySetterGetter> mList = new ArrayList<MyAnySetterGetter>();
        for (int i = 0; i < items.length(); i++) {
             JSONObject c = items.getJSONObject(i);
             String mfilename = c.getString("myjsonattribute2");
             mList.add(mfilename);
            }
    } catch (JSONException e) {
      //e.printStackTrace();
    }

затем используйте приведенный выше список для вставки данных из списка в SQLite, например

String str1 = mList.get(position).getMYITEM1();
String str2 = mList.get(position).getMYITEM2();

вставьте str1 и str2 в SQLite, надеюсь, вы поймете.

person Attaullah    schedule 28.04.2016
comment
Как вы упоминали выше, новая строка вставлена ​​​​в sqlite. Но я хочу просто проверить данные, используя где имя условия = имя параметра. Если это имя параметра, соответствующий столбец пуст, можно вставить, иначе обновить - person Nivethitha; 28.04.2016
comment
ОК, получите данные из базы данных, а затем проверьте, возвращает ли объект значение null или нет, если значение null, затем обновите данные. - person Attaullah; 28.04.2016
comment
Существующая функция, если она работала хорошо, если условие, использующее проверенный столбец, существует или нет, может быть хорошо проверено, если существует, идет на обновление, в противном случае вставляется функция. - person Nivethitha; 28.04.2016

вам следует

  1. установить ключ для таблицы, затем
  2. вставить (если ключ существовал, он больше не будет вставлен), затем
  3. обновить всю строку.
person HoangYell    schedule 26.03.2017