2017-01-14 1 views
-1

Ceci est mon databaseComment vérifier si l'enregistrement existe déjà dans le tableau SQLite

public void DBCreate() { 
    SQLITEDATABASE = getActivity().openOrCreateDatabase("FavoritesDB", Context.MODE_PRIVATE, null); 
    SQLITEDATABASE.execSQL("CREATE TABLE IF NOT EXISTS favorite(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, word VARCHAR, meaning VARCHAR);"); 
} 

Voilà comment je suis en train de créer de nouvelles lignes:

String query = "INSERT INTO favorite (word,meaning) VALUES('"+wordd+"', '"+mean+"');"; 
Cursor c=SQLITEDATABASE.rawQuery("SELECT * FROM favorite WHERE id=?", null); 
if (c.moveToFirst()) 
{  
     Toast.makeText(getActivity(),"inserted",Toast.LENGTH_LONG).show(); 
        SQLITEDATABASE.execSQL(query); 
} 
else 
{ 
     Toast.makeText(getActivity(),"exists",Toast.LENGTH_LONG).show(); 
} 

Ma question est que la façon de vérifier les données avant d'insérer valeur dans la table?

Répondre

0

avant d'insérer effectuer une requête de sélection et de vérifier la taille cursor s'il est> 0 que l'enregistrement existe déjà.

Je ne sais pas pourquoi vous passez null dans votre requête

Cursor c=SQLITEDATABASE.rawQuery("SELECT * FROM favorite WHERE id=?", null); 

au lieu

Cursor c=SQLITEDATABASE.rawQuery("SELECT * FROM favorite WHERE id=?", new String[]{"your id1"}); 

ou si vous voulez tout sélectionner l'enregistrement puis

Cursor c=SQLITEDATABASE.rawQuery("SELECT * FROM favorite"); 
0

try this code:

Cursor c = SQLITEDATABASE.rawQuery("SELECT * FROM favorite WHERE id=?", new String[]{"your_id_name"}); 
    Log("Cursor Count : " + c.getCount()); 
       if(c.getCount()>0) 
       { 
       Toast.makeText(getActivity(),"exists",Toast.LENGTH_LONG).show(); 

       } 
       else 
       { 
        Toast.makeText(getActivity(),"inserted",Toast.LENGTH_LONG).show(); 
        SQLITEDATABASE.execSQL(query); 
       } 

Et votre requête de sélection devrait ressembler à:

String sql ="SELECT PID FROM "+TableName+" WHERE PID="+pidValue; 
+0

comment je peux obtenir pidValue dans mon code –

+0

'public void DBCreate (int pidValue) ' –

+0

pidValue est la valeur particulière que vous vérifiez dans une rangée ... si elle est déjà insérée .. – rafsanahmad007

0

Options:

1) Si vous ne voulez pas répéter l'une des valeurs dans une colonne, définissez le paramètre de colonne dans la CREATE méthode à "UNIQUE" ou même "PRIMARY KEY" si le contenu doit être la clé primaire à reconnaître. Ainsi, vous pouvez probablement éviter les répétitions sans avoir à vérifier.

2) boucle à travers la table (je suis un étudiant, donc j'espère que fonctionne bien):

Cursor c = SQLITEDATABASE.rawQuery("SELECT * FROM favorite", null); 

    if (c.getCount() > 0) { 

     String searchString = "some word"; // word you are about to insert 

     while (c.moveToNext()) { 

      c.moveToFirst(); 
      int colIndex = c.getColumnIndex("word"); 
      String wordInCurrentRow = c.getString(colIndex); 

      if (!(wordInCurrentRow.equals(searchString))) { 
       // insert method 
      } else { 
       // do nothing 
       Log.d("word already existing", "nothing to insert"); 
      } 
     } 
    }