2014-06-30 3 views
-1

J'ai un problème avec le numéro de ligne de la base de données. Ma table a 3 colonnes (ROWID, WORD, DEFINITION) et 3 rangées. Je supprime la deuxième ligne, puis j'essaie d'interroger la même ligne, mon application échoue. Est-ce un problème d'auto-incrémentation? que devrais-je faire?Sqlite Numéro de ligne

Voici mon code;
// Obtenir cette fonction

public String getThat(int id) { 
String result= ""; 
String[] columns = new String[]{KEY_ROWID,KEY_WORD,KEY_DEFINITION}; 
Cursor c = ourDatabase.query(DB_TABLE, columns, KEY_ROWID + 
"=" + id, null, null, null, null,null); 
if(c!=null){ 
c.moveToFirst();  
} 
result = c.getString(c.getColumnIndex(KEY_DEFINITION)); 

return result; 
} 

// supprimer la fonction

public boolean deleteRecords(long rowId){ 
    return ourDatabase.delete(DB_TABLE, KEY_ROWID +"="+rowId,null)>0; 
    } 
+0

Quelle erreur obtenez-vous? –

Répondre

1

Lorsque la requête ne correspond pas quoi que ce soit, un Cursor non nul est retourné de toute façon, mais il ne contient pas de lignes . Lorsque vous essayez d'accéder aux données d'une ligne non existante, une exception est levée.

Modifier cette

if(c!=null){ 
c.moveToFirst();  
} 
result = c.getString(c.getColumnIndex(KEY_DEFINITION)); 

à quelque chose comme

if(c.moveToFirst()){ 
    result = c.getString(c.getColumnIndex(KEY_DEFINITION));  
} 

à savoir vérifier la valeur de retour de moveTo..() et seules des données du curseur d'accès si le mouvement a réussi et le curseur pointe vers une ligne valide.

+0

nop, ça ne marche pas. Je pense que mon application doit diminuer le troisième ROWID à 2 après avoir supprimé la deuxième rangée mais je ne sais vraiment pas comment le faire – portiexc

+1

Les identifiants ne devraient pas vraiment changer une fois assignés. Si un code dépend d'identifiants contigus, corrigez ce code. – laalto

+0

Je l'ai eu, merci pour l'info – portiexc