Introduzione
Questo è basato su Java di Android ed è un buon esempio sulla modifica del database senza infastidire i fan/clienti dell'applicazione. Questo si basa sull'idea della pagina SQLite FAQ http://sqlite.org/faq.html#q11
Il problema
Non ho notato che ho bisogno di impostare un row_number o record_id per eliminare un singolo elemento acquistato in una ricevuta, e al allo stesso tempo il numero di codice a barre dell'oggetto mi ha ingannato pensando di renderlo come la chiave per cancellare quell'elemento. Sto salvando i dettagli di una ricevuta nella tabella receipt_barcode. Lasciandolo senza un record_id può significare cancellare tutti i record dello stesso articolo in una ricevuta se ho usato il codice a barre dell'oggetto come chiave.
Avviso
Vi preghiamo di comprendere che questo è un copia-incolla del mio codice Sono lavorare al momento in cui scriviamo. Usalo solo come esempio, incollare casualmente non ti aiuterà. Modificalo in base alle tue esigenze
Inoltre, non dimenticare di leggere i commenti nel codice.
Il Codice
utilizzare questo come un metodo nella classe di verificare prima se la colonna che si desidera aggiungere è mancante. Lo facciamo solo per non ripetere il processo di modifica della tabella receipt_barcode. Basta menzionarlo come parte della tua classe. Nel prossimo passaggio vedrai come lo useremo.
public boolean is_column_exists(SQLiteDatabase mDatabase , String table_name,
String column_name) {
//checks if table_name has column_name
Cursor cursor = mDatabase.rawQuery("pragma table_info("+table_name+")",null);
while (cursor.moveToNext()){
if (cursor.getString(cursor.getColumnIndex("name")).equalsIgnoreCase(column_name)) return true;
}
return false;
}
Poi, il seguente codice viene utilizzato per creare la receipt_barcode tavolo se lo fa già NON uscita per il 1 ° tempo gli utenti della tua app. E si prega di notare "SE NON ESISTE" nel codice. Ha importanza.
//mDatabase should be defined as a Class member (global variable)
//for ease of access :
//SQLiteDatabse mDatabase=SQLiteDatabase.openOrCreateDatabase(dbfile_path, null);
creation_query = " CREATE TABLE if not exists receipt_barcode (";
creation_query += "\n record_id INTEGER PRIMARY KEY AUTOINCREMENT,";
creation_query += "\n rcpt_id INT(11) NOT NULL,";
creation_query += "\n barcode VARCHAR(255) NOT NULL ,";
creation_query += "\n barcode_price VARCHAR(255) DEFAULT (0),";
creation_query += "\n PRIMARY KEY (record_id));";
mDatabase.execSQL(creation_query);
//This is where the important part comes in regarding the question in this page:
//adding the missing primary key record_id in table receipt_barcode for older versions
if (!is_column_exists(mDatabase, "receipt_barcode","record_id")){
mDatabase.beginTransaction();
try{
Log.e("record_id", "creating");
creation_query="CREATE TEMPORARY TABLE t1_backup(";
creation_query+="record_id INTEGER PRIMARY KEY AUTOINCREMENT,";
creation_query+="rcpt_id INT(11) NOT NULL,";
creation_query+="barcode VARCHAR(255) NOT NULL ,";
creation_query+="barcode_price VARCHAR(255) NOT NULL DEFAULT (0));";
mDatabase.execSQL(creation_query);
creation_query="INSERT INTO t1_backup(rcpt_id,barcode,barcode_price) SELECT rcpt_id,barcode,barcode_price FROM receipt_barcode;";
mDatabase.execSQL(creation_query);
creation_query="DROP TABLE receipt_barcode;";
mDatabase.execSQL(creation_query);
creation_query="CREATE TABLE receipt_barcode (";
creation_query+="record_id INTEGER PRIMARY KEY AUTOINCREMENT,";
creation_query+="rcpt_id INT(11) NOT NULL,";
creation_query+="barcode VARCHAR(255) NOT NULL ,";
creation_query+="barcode_price VARCHAR(255) NOT NULL DEFAULT (0));";
mDatabase.execSQL(creation_query);
creation_query="INSERT INTO receipt_barcode(record_id,rcpt_id,barcode,barcode_price) SELECT record_id,rcpt_id,barcode,barcode_price FROM t1_backup;";
mDatabase.execSQL(creation_query);
creation_query="DROP TABLE t1_backup;";
mDatabase.execSQL(creation_query);
mdb.setTransactionSuccessful();
} catch (Exception exception){
Log.e("table receipt_bracode", "Table receipt_barcode did not get a primary key (record_id");
exception.printStackTrace();
} finally {
mDatabase.endTransaction();
}
è possibile utilizzare qualsiasi browser db per modificare il database. Inoltre stanno eliminando e creando le tabelle. ma non vogliamo preoccuparcene. da qui puoi scaricare il browser db per qualsiasi sistema operativo http://sqlitebrowser.org/ – vichu