2014-10-06 43 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

相關問題