2013-01-22 12 views
6

Come faccio a rilasciare e ricreare una tabella con informazioni aggiornate?SQLite Drop and Recreate Table

Ad esempio; Ho un tavolo nella mia domanda con 5 record.

ID  Entry 
1  a 
2  b 
3  c 
4  d 
5  e 

Ora quando elimino un record consente di dire, ID 3 della tabella diventa

ID  Entry 
1  a 
2  b 
4  d 
5  e 

Come posso cadere, e ricrearlo a diventare tale:

ID  Entry 
1  a 
2  b 
3  d 
4  e 

In realtà la la cancellazione è controllata dall'utente, quindi qualsiasi record può essere cancellato in qualsiasi momento.

+0

Perché vuoi per raggiungere questo obiettivo? Dovresti ricreare il database ogni volta che qualche utente cambia qualcosa in esso. – Leandros

+1

perché ne hai bisogno? piuttosto che trovare un modo ingombrante di rispondere alla tua domanda, preferirei trovare un modo per non averne bisogno. – njzk2

+0

no. Voglio ricreare la tabella non il database.Ci sono alcuni motivi per cui; per esempio: quando viene cancellato un record, il processo di cancellazione viene eseguito dalla riga correntemente selezionata poiché posso selezionare fino alla riga 4, l'ID 5 non può mai essere cancellato. – Pztar

risposta

13

Si potrebbe fare seguente: eliminare la riga che si desidera eliminare:

 public boolean deleteRow(int id) 
     { 
     return db.delete(YOUR_TABLE, ROW_ID + "=" + _id, null) > 0; 
     } 

leggere le voci rimanenti (solo voci, non l'ID) in un ArrayList, cadere il vostro tavolo:

 db.execSQL("DROP TABLE IF EXISTS " + YOUR_TABLE); 

e ricrea il tuo tavolo. Quindi i numeri ID saranno nuovamente da 1-XX nell'ordine

+1

è praticamente quello che ho. Tuttavia quando lancio il tavolo e poi lo faccio per ricrearlo, torna come NullPointer. Non lo so, immagino che dovrò giocherellare ancora un po '. – Pztar

+0

quindi potresti mostrare il codice dove hai fatto questo? Ad esempio, se l'hai fatto in un ordine errato, è possibile che tu elimini la tabella prima di salvarla in arrayList. Questo potrebbe essere il motivo per cui ottieni un nullpointer. In Germania diciamo che a volte non è possibile vedere la foresta a causa di così tanti alberi :) – Opiatefuchs

+0

È necessario aggiungere uno spazio dopo EXISTS – Matthew

1

So che questo è un vecchio post ma ho pensato di chiarire le cose per gli altri che potrebbero fare la stessa cosa che hai basato sul tuo commento:

Quando un record viene eliminato il processo di eliminazione è fatto dalla riga correntemente selezionata dato che posso selezionare solo fino a remare 4, ID 5 non può mai essere cancellato.

Davvero non dovresti ricreare i tuoi ID. Mette a posto le cose se vengono utilizzate come chiavi in ​​un'altra tabella, inoltre se si dispone di un database di grandi dimensioni, la loro ricreazione può semplicemente perdere tempo quando non ce n'è davvero bisogno.

Quello che dovresti fare è salvare un array di id insieme ad un array di voci in modo da sapere quale ID eliminare in base alla riga che hanno selezionato (o qualche altro modo di collegare id e valori in modo da poter afferrare loro più tardi).

Nell'esempio di cui sopra, dopo che qualcuno elimina la riga con id 3, gli array sarebbe simile a questa:

entries = { "a","b","d","e" } 
ids = { 1,2,4,5 } 

se qualcuno sceglie "e", che costituisce il quarto punto, è sufficiente eliminare dal tabella in cui l'id è uguale al quarto valore nell'array ids, 5 in questo caso.

In questo modo se vengono continuamente aggiunti e rimossi gli elementi, il database potrebbe finire con ids 2, 34, 56 e 435. E non importa, perché il codice terrà traccia e sapere quale id da eliminare.

0

Un altro approccio

public boolean deleteTable(int id) { 
    SQLiteDatabase database = dbHelper.getReadableDatabase(); 
    final String whereClause = DBHelper.COLUMN_ID + "=?"; 
    final String whereArgs[] = {String.valueOf(id)}; 
    int affectedRows = database.delete(DBHelper.TABLE_NAME_OGR, whereClause, whereArgs); 
    return affectedRows > 0; 
}