2013-07-29 31 views
0

我已經創建了一個應用程序來將數據插入sq-lite。我想要如果我再次輸入相同的數據,它應該給e吐司按摩,然後它只更新數據不重新插入。 我應該怎麼辦.....如何在Android中插入數據到sqlite的過濾器

現在數據被重新插入 SQLiteOpenHelper的方法代碼.....在Activity類

public void insertdata(String name,String ph,String area){ 
    ContentValues cv=new ContentValues(); 
    cv.put("name", name); 
    cv.put("phone", ph); 
    cv.put("area", area); 
    sd=this.getWritableDatabase(); 
    sd.insert("location", null, cv); 
    sd.close(); 

方法使用......

public void onClick(View v) { 
       // TODO Auto-generated method stub 
       help=new MyHelper(getApplicationContext()); 
       help.getWritableDatabase(); 
       String myname=name.getText().toString(); 
       String call=phone.getText().toString(); 
       String myarea=area.getText().toString().trim(); 
       help.insertdata(myname, call, myarea); 

       Toast.makeText(getApplicationContext(), "data saved ", Toast.LENGTH_SHORT).show(); 

      } 
     }); 

回答

0

你可以嘗試這樣的事情:

ContentValues values=new ContentValues(); 
    cv.put("name", name); 
    cv.put("phone", ph); 
    cv.put("area", area); 

if (db == null) { 
db = getWritableDatabase(); 
    } 
if (isNameExists(name)) { //check if name exits 
     id = db.update(TABLE_NAME, values, name + " = ?", 
       new String[] {name}); 
    } else { 
     id = db.insert(TABLE_NAME, null, values); 
    } 

    public boolean isNameExists(String name) { 
    Cursor cursor = null; 
    boolean result = false; 
    try { 
     String[] args = { "" + name }; 
     StringBuffer sbQuery = new StringBuffer("SELECT * from ").append(
       TABLE_NAME).append(" where name=?"); 
     cursor = getReadableDatabase().rawQuery(sbQuery.toString(), args); 
     if (cursor != null && cursor.moveToFirst()) { 
      result = true; 
     } 
    } catch (Exception e) { 
     Log.e("AppoitnmentDBhelper", e.toString()); 
    } 
    return result; 
+0

如果名稱已經存在,應該更新什麼方法 – 12345

+0

我也寫過更新方法...根據您的需要修改.. –

+0

我應該把所有三個參數與內容值.....名稱,電話和區域? – 12345

0

的數據是因爲你的方法永遠不會檢查它是否已經存在於數據庫中,所以重新插入。您需要爲某個獨特組合添加查詢 - 可能是姓名和電話號碼。如果該查詢返回結果,則可以提示用戶輸入數據。

String query = "SELECT * FROM " + TABLE_NAME + " WHERE name = " + name; 
SQLiteDatabase db = this.getReadableDatabase(); 
Cursor cursor = db.rawQuery(query, null); 
if(cursor != null && cursor.moveToFirst()){ //if cursor has entry then don't reinsert 
    //prompt user with dialog 
} else { 
    //insert data 
} 

此外,您不能使用Toast。你想要的是一個Dialog。如果數據存在,您可以向用戶顯示自定義Dialog,您可以使用它來(1)輸入新數據(2)編輯現有數據(3)選擇重新插入他們發佈的數據。 Toast只會向他們顯示一條消息 - 「重新插入數據」。這聽起來不像是你想要實現的功能。

要更新數據庫,您可以使用更新陳述,具體取決於您要更改的字段。

String query = "UPDATE " + TABLE_NAME + " SET"; 
if(!name.isEmpty(){ 
    query += " name = " + name; 
} 

if(!phone.isEmpty(){ 
    query += " phone = " + phone; 
} 

SQLiteDatabase db = this.getWritableDatabase(); 
db.execSQL(CREATE_CONTACTS_TABLE) 

我把if語句放進來檢查哪些字段正在被更改並相應地添加到查詢中。在替代方案中,你可以使用這樣的東西

public int updateContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); 
    values.put(KEY_PH_NO, contact.getPhoneNumber()); 

    // updating row 
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", 
      new String[] { String.valueOf(contact.getID()) }); 
} 

雖然我havnet修改它以適合你的例子,你可以看到基本的方法。您可以使用條件來檢查是否提供值,如果您將它們添加到將在數據庫中更新它們的ContentVlues列表中。

+0

如果名稱應該是更新方法已經存在? – 12345

+0

這取決於你想要做什麼 - 你想要改變值還是你想爲同一個人添加多個條目?例如 - 也許你想要2個電話號碼 - 比如家庭,手機,工作。在這種情況下,你會想插入。如果你想更新,那麼你會使用一個更新陳述,我將添加上面 – Rarw

+0

我想更新名稱的區域和電話數據..如果使用相同的名稱... – 12345

相關問題