【问题标题】:comparing the record with the database record whether exists or not比较记录与数据库记录是否存在
【发布时间】:2010-12-18 05:36:52
【问题描述】:

我写了下面的代码来比较记录和数据库记录。它比较但插入所有记录

 public void onClick(View v) {
  if(v.equals(add))
  {
     if(ifExisting())
       {
        insert();
     Log.e("Data Inserting","true");
     Intent i=new Intent(AddCategory.this,ShareFolioActivity.class);
     startActivity(i);
        //Toast.makeText(AddCategory.this, "Already exists",Toast.LENGTH_LONG).show();
         }

   else
         {
              Toast.makeText(AddCategory.this, "Already exists",Toast.LENGTH_LONG).show();
              Log.e("Data Inserting","false");
      }
  }

    }

boolean ifExisting() {

     Log.e("wquery","SELECT * FROM  sharelist  WHERE category='"+category.getText().toString()+"'");
     Cursor c = db.rawQuery( "SELECT category FROM  sharelist  WHERE category='"+category.getText().toString()+";'",null);



     if(c.getCount()==-1)
      {

       Log.e("Condition true","true");
       return false;
      } 

      else
      {
       Log.e("Condition true","false");
          return true;
      }
}

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    你有if(ifExisting()) { insert();

    不应该是if(!ifExisting()) { insert();

    否则,如果存在则插入。

    【讨论】:

    • 现在没有任何记录进入(即显示“已经存在”)
    【解决方案2】:

    如果查询返回 0 行,您似乎期望 c.getCount() 将为 -1。为什么不返回0? (我不记得见过返回-1的情况,但也许我的记忆有问题。)

    无论如何,检查c.getCount() <= 0 似乎更安全。

    还有,这个查询

     Cursor c = db.rawQuery( "SELECT category FROM  sharelist  WHERE category='"+category.getText().toString()+";'",null);
    

    格式不正确 - 查看 ";'" 的末尾。你想在那里有"'"。 (传递给rawQuery 的查询字符串不能以分号结尾;否则,"';" 将是正确的选择。)

    正如其他人在其他线程上对您所说的那样,您真的不想通过串联进行查询;使用 selectionArgs 参数是一种更安全的方式来传递查询值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      相关资源
      最近更新 更多