【问题标题】:How to check data in SQLite if already exist update or else insert in android如果已经存在更新,如何检查 SQLite 中的数据,或者在 android 中插入
【发布时间】:2016-04-28 05:01:16
【问题描述】:

我想检查 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。

任何人解决这个问题很高兴感谢。 提前致谢

【问题讨论】:

  • 您遇到什么错误?此外,您似乎在使用 TABLE_NAMECHILD_NAME 作为字符串,而不是它们看起来的常量。
  • 表名是我的表名,有两列子名和标题名。我必须将整个 json 数据转换为字符串插入到列标题名称中,我将给出一个选项名称,例如。一个 json 的菜单,然后是另一个 json 的第二个产品选项
  • 您将 JSON 存储到 Sqlite 中?您可能希望改为使用 Realm 作为数据库
  • 我不知道 Realm 如何使用它

标签: android android-layout android-fragments android-sqlite android-studio-2.0


【解决方案1】:

您可以像这样使用insertWithOnConflict()

db.insertWithOnConflict(TABLE, null, yourContentValues, SQLiteDatabase.CONFLICT_REPLACE);

【讨论】:

  • 我想检查 where 条件选项名称是否已经存在。如何可能 insertwithonconflict
  • name 是用户主键?
  • 它对我不起作用,它可以一次又一次地插入相同的 json 数据
【解决方案2】:

你可以参考这个Link。该链接说明了如何在表格中找到可用的电子邮件地址,您可以更改列名、表格并根据其传递值。在您的场景中,您要检查名称是否已经存在,因此您必须传递要查找的名称。如果名称在那里,则此方法将返回 true 或 false。您可以根据响应验证是否必须插入或更新。即,false 表示您必须插入,否则如果它是 true 则表示您必须更新。

【讨论】:

  • 我使用了运行良好的数据存在功能。非常感谢 jeeva
【解决方案3】:

你应该使用替换成

REPLACE INTO table(...) VALUES(...);

【讨论】:

  • 我不想替换表。我只想更新数据,如果数据已经存在于表中,使用 where condtion name= option name
  • "REPLACE INTO" 不会替换表格。它只是插入或更新数据
  • 你能正确告诉 REPLACE INTO 查询吗
  • rawQuery("替换成 TABLE_NAME (CHILD_NAME) 值("+optionname+");")
【解决方案4】:

问题不是很清楚,但是我想您想检查是否在 SQLite 中插入了数据/记录。您将需要定义一些额外的变量 long rowInserted insert() 方法返回新插入行的行 ID,或者在发生错误时返回 -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 的问题,首先将所有数据存储在任何 List 运行时并从中获取字符串,然后您就可以存储在 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();

在 SQLite 中插入 str1 和 str2 希望你能明白。

【讨论】:

  • 正如你上面提到的插入到 sqlite 的新行。但我只想使用 where 条件 name=optionname 检查数据。如果选项名对应的列为空可以插入,否则更新
  • OK 从数据库中获取数据然后检查对象是否返回null,如果为null则更新数据
  • 如果运行良好则存在函数,如果使用检查列的条件存在或不存在,则可以很好地检查如果存在则进行更新,否则插入函数。
【解决方案5】:

你应该

  1. 为表格设置键,然后
  2. 插入(如果密钥存在则不再插入),然后
  3. 更新所有行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多