Introducción
Esto se basa en Java de Android y es un buen ejemplo de cómo cambiar la base de datos sin molestar a los fanáticos/clientes de la aplicación. Esto se basa en la idea de la página SQLite FAQ http://sqlite.org/faq.html#q11
El problema
No me di cuenta de que tengo que configurar un row_number o record_id para eliminar un solo artículo comprado en un recibo, y por lo Al mismo tiempo, el número de código de barras del artículo me engañó y me hizo pensar que sería la clave para eliminar ese artículo. Estoy guardando los detalles de un recibo en la tabla código de barra de recibo. Dejarlo sin un record_id puede significar borrar todos los registros del mismo ítem en un recibo si utilicé el código de barras del ítem como la clave.
Aviso
Por favor, entienda que este es un copiar y pegar de mi código Soy trabajar en en el momento de escribir estas líneas. Úselo solo como ejemplo, copiar y pegar al azar no lo ayudará. Modifique esto primero según sus necesidades
Además, no se olvide de leer los comentarios en el código.
El Código
utilizar esto como un método en su clase para comprobar primero si la columna que desea agregar no se encuentra. Hacemos esto solo para no repetir el proceso de alterar la tabla receipt_barcode. Solo menciónelo como parte de su clase. En el siguiente paso, verá cómo lo usaremos.
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;
}
A continuación, el siguiente código se utiliza para crear la receipt_barcode tabla si ya lo hace NO salida para la 1ª vez que los usuarios de su aplicación. Y tenga en cuenta el "SI NO EXISTE" en el código. Tiene importancia.
//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();
}
puede utilizar cualquier navegador db para editar la base de datos. También están borrando y creando las tablas. pero no queremos molestarnos con eso. puede descargar el navegador db para cualquier sistema operativo desde aquí http://sqlitebrowser.org/ – vichu