2014-10-06 55 views
1

我发现了一些经典的“如何插入新记录或更新一个,如果它已经存在”,但我不能得到他们中的任何一个对用户的选择工作在Android的插入如果不存在其他更新用户的选择android

我有一个表,如下所示: mytable(Name text,Longitude double, Latitude double)

我想要做的就是添加一条记录了一个独特的名称。如果名称已经存在,我希望用户选择修改字段或在android中忽略它。

有人可以告诉我该怎么做吗?

我对插入按钮代码:

public void insert(View v) { 
     final String nm = name.getText().toString(); 
     final String longitude = ln.getText().toString(); 
     final String latitude = lt.getText().toString(); 
     // ln.setText(""); 
     // lt.setText(""); 
     // insert data into able 
     try { 
      Cursor c = db.rawQuery("select count(*) from mytable ", null); 

      if (c.getCount() > 0) { 
       c = db.rawQuery("select (*) from mytable where Name=" + nm, null); 
       if (c.getCount() > 0) { 
        AlertDialog.Builder builder = new AlertDialog.Builder(this); 

        builder.setTitle("Confirm"); 
        builder.setMessage("Record Already Exists Want to overwrite?"); 

        builder.setPositiveButton("YES", 
          new DialogInterface.OnClickListener() { 

           public void onClick(DialogInterface dialog, 
             int which) { 
            // Do nothing but close the dialog 
            ContentValues updatedValues = new ContentValues(); 
            updatedValues.put("Longitude", longitude); 
            updatedValues.put("Latitude", latitude); 
            db.update("mytable", updatedValues, "Name=" 
              + nm, null); 
            Toast.makeText(getApplicationContext(), 
              "updated", Toast.LENGTH_LONG) 
              .show(); 
            dialog.dismiss(); 
           } 

          }); 

        builder.setNegativeButton("NO", 
          new DialogInterface.OnClickListener() { 

           @Override 
           public void onClick(DialogInterface dialog, 
             int which) { 
            // Do nothing 
            dialog.dismiss(); 
           } 
          }); 

        AlertDialog alert = builder.create(); 
        alert.show(); 
        // Toast.makeText(this, "values updated successfully.", 
        // Toast.LENGTH_LONG).show(); 
        /* record exist */ 
       } else { 
        db.execSQL("insert into mytable values('" + nm + "','" 
          + longitude + "','" + latitude + "')"); 
        /* record not exist */ 
        // display Toast 
        Toast.makeText(this, "values inserted successfully.", 
          Toast.LENGTH_LONG).show(); 
       } 
      } 
     } catch (Exception e) { 
      db.execSQL("insert into mytable values('" + nm + "','" + longitude 
        + "','" + latitude + "')"); 
      /* record not exist */ 
      // display Toast 
      Toast.makeText(this, "values inserted successfully.", 
        Toast.LENGTH_LONG).show(); 

     } 

    } 

当我插入具有相同名称的值,所添加的。但是我做什么是当用户输入相同的名称已经存在一个警报是buit问用户是否想要更新或忽略。 如果他点击是记录被更新,如果没有则什么也不会发生......

+0

以'query'和'insert'或'update'。究竟是什么问题? – 2014-10-06 07:01:21

+0

邮政编码为您迄今为止做了什么。 – Neo 2014-10-06 07:30:09

+0

@CL。当用户单击插入时,如果数据库具有相同名称的记录,则形成警报以询问用户是否想要更新或解雇。 – 2014-10-06 08:32:20

回答

1

首先进行查询,以检查是否有像这样同一名称的记录:

SELECT * FROM mytable WHERE name='*text*' 

在这里name是您的用户的输入。然后你检查该查询是否返回记录。如果确实如此,请向用户提供反馈以设置其他名称或通过更新返回的记录来忽略它。 如果它不返回任何记录,则可以将该记录插入到数据库中。

0

正确的方式使用rawQuery

c = db.rawQuery("select * from mytable where Name = ?", new String[] { nm }); 
+0

感谢它,但是我想根据用户的选择更新数据库(如果记录存在)。 – 2014-10-08 16:41:12

+0

这很好,但我上面给出的是使用'rawQuery'方法的正确语法。整个场所是为了避免params的where子句的字符串连接。第二个参数背后有一个原因,你发送的是null。 – Neo 2014-10-08 16:49:27

+0

没关系,好​​耶更正,谢谢... – 2014-10-10 05:06:33

相关问题