2012-04-29 8 views
0

私はアプリケーションが最初にヘルパークラスを介して開いているときにビルドを取得することができるので、dbfavoritosHelper.insert(favId、favName、favType); ourCursor.requery(); Toad.makeText(getApplicationContext()、 "El medio a sido ausお気に入り!")を削除して問題なく項目を削除しますが、達成したいのは、追加ボタンを押す瞬間ですチェックは既に同じfavIdのアイテムですので、コピーしたいのではないのでコピーしたいのですがコピーを作成したくないので追加したくないので、今のコードは動作していませんここにある:私の主な活動でAndroidのsqlite dbでのダブルエントリの確認方法は?

//this is how I call insert 
Button Agrefav = (Button) findViewById(R.id.btnFav); 
      Agrefav.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       if(arrayOfWebData.isEmpty()){ 
        Toast.makeText(getApplicationContext(), 
          "No hay medio para agregar a favoritos!", 
          Toast.LENGTH_LONG).show(); 
       }else{ 
        if(!dbfavoritosHelper.find(favId)){ 
         dbfavoritosHelper.insert(favId, favName, favType); 
        ourCursor.requery(); 
Toast.makeText(getApplicationContext(), 
           "El medio a sido a tus favoritos!", 
           Toast.LENGTH_LONG).show(); 
        }else{ 
         dbfavoritosHelper.update(favId, favId, favName, favType); 
         ourCursor.requery(); 
         Toast.makeText(getApplicationContext(), 
           "El medio se a actualizado en tus favoritos!", 
           Toast.LENGTH_LONG).show(); 
        } 
       } 
      }}); 


//this is how I call delete 
dbfavoritosHelper.delete(delId); 
        delId=null; 
        ourCursor.requery(); 
私のヘルパーで

//this is how I insert items to table 
public void insert(String mId, String mName, String mType) { 
    ContentValues cv=new ContentValues(); 
    cv.put("medioId", mId); 
    cv.put("medioName", mName); 
    cv.put("medioType", mType); 

    getWritableDatabase().insert("favorito", null, cv); 

} 

//this is how I'm trying to find if an item already exists in db, but not working 
public boolean find(String mId){ 
    try { 
    getReadableDatabase().rawQuery("SELECT * FROM favorito WHERE favorito.medioId='"+mId+"';", null); 

    return true;   
    } catch (SQLException sqle){ 
    return false; 
    } 
} 

//this is how I update items 
public void update(String id, String mId, String mName, String mType){ 
    ContentValues cv=new ContentValues(); 
    String[] args={id}; 
    cv.put("medioId", mId); 
    cv.put("medioName", mName); 
    cv.put("medioType", mType); 
    getWritableDatabase().update("favorito", cv, "_id=?", args); 
} 

//this is how I delete them 
public void delete(String id){ 
    getWritableDatabase().delete("favorito", "_id=?", new String[] {id}); 
} 

任意の勧告は歓迎され、感謝

答えて

0

私のソリューションは、あなたはまた、あなたのためにテーブルのチェックをさせることができます

public boolean find(String mId){  
    Cursor c = getReadableDatabase().rawQuery("SELECT * FROM favorito WHERE favorito.medioId='"+mId+"';", null); 
    if (c.moveToFirst()) 
    { return true; }else{ 
    return false;} 
} 
1

に変更しました。私たちはあなたの挿入機能が制約例外をキャッチし、それが真/偽返すように少し変更した場合ので

create table foo (
    name text unique); 

insert into foo (name) values ("Pablo"); 
insert into foo (name) values ("Pablo"); // Doesn't add row! 

:ここでの例では、SQLiteの中だ

public boolean insert(String mId, String mName, String mType) { 
    ContentValues cv = new ContentValues(); 
    cv.put("medioId", mId); 
    cv.put("medioName", mName); 
    cv.put("medioType", mType); 

    try { 
     getWritableDatabase().insertOrThrow("favorito", null, cv); 
     return true; // Won't be executed if an error is thrown 
    } 
    catch(SQLiteConstraintException e) { 
     return false; 
    } 
} 
+0

しかし、この方法は偽を送信しませんあなたは帰りますか? – zvzej

+0

私は説明を加えました。 – Sam

+0

仕組みを説明してくれてありがとう! – zvzej

関連する問題