Buenas!
He estado haciendo mi primera base de datos SQLite y la verdad es que, aunque muchas cosas me parecen lógicas, otras me parecen demasiado engorrosas, y quizá es que no lo hago bien.
He creado una base de datos con una tabla de prueba, con un par de campos solamente, y para ello he extendido la clase SQLiteOpenHelper, implementando el onCreate y onUpgrade, y a continuación he definido los CRUD (añadir datos a la tabla, actualizarlos, eliminarlos, obtener todos los registros...).
El problema es que ahora que quiero hacer la base de datos real, he creado 4 tablas con muchos campos, y por poner el ejemplo de una de ellas, hago, en el onCreate:
String CREATE_CLIENTES_TABLE = "CREATE TABLE clientes ( " +
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"nombre TEXT, " +
"nombre_comercial TEXT, " +
"nif TEXT, " +
"telf INTEGER, " +
"movil INTEGER, " +
"email TEXT, " +
"calle TEXT, " +
"codpost INTEGER, " +
"ciudad TEXT, " +
"forma_pago TEXT )";
db.execSQL(CREATE_CLIENTES_TABLE);
Luego, para las operaciones CRUD:
private static final String TABLE_CLIENTES = "clientes";
Ahora las columnas
private static final String KEY_CLIENTES_ID = "id";
private static final String KEY_CLIENTES_NOMBRE = "nombre";
private static final String KEY_CLIENTES_NOMCOM = "nombre_comercial";
private static final String KEY_CLIENTES_NIF = "nif";
private static final String KEY_CLIENTES_TELF = "telf";
private static final String KEY_CLIENTES_MOVIL = "movil";
private static final String KEY_CLIENTES_EMAIL = "email";
private static final String KEY_CLIENTES_CALLE = "calle";
private static final String KEY_CLIENTES_CODPOST = "codpost";
private static final String KEY_CLIENTES_CIUDAD = "ciudad";
private static final String KEY_CLIENTES_FORMPAG = "forma_pago";
private static final String[] CLIENTES_COLUMNS = {KEY_CLIENTES_ID,KEY_CLIENTES_NOMBRE,KEY_CLIENTES_ NOMCOM,KEY_CLIENTES_NIF,KEY_CLIENTES_TELF,KEY_CLIE NTES_MOVIL,KEY_CLIENTES_EMAIL,KEY_CLIENTES_CALLE,K EY_CLIENTES_CODPOST,KEY_CLIENTES_CIUDAD,KEY_CLIENT ES_FORMPAG};
Y luego, uno a uno, los métodos, por ejemplo (este metodo no coincide con Clientes, es a modo de ejemplo):
public List<Parte> getAllPartes() {
List<Parte> partes = new LinkedList<Parte>();
//1. Build the query
String query = "SELECT * FROM " + TABLE_PARTES;
//2. Get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
//3. Go over each row, build parte and add it to list
Parte parte = null;
if(cursor.moveToFirst()){
do{
parte = new Parte(null, null, null);
parte.setId(Integer.parseInt(cursor.getString(0))) ;
parte.setNombre(cursor.getString(1));
parte.setApellido(cursor.getString(2));
parte.setMoreInfo(cursor.getString(3));
//Add parte to partes
partes.add(parte);
} while(cursor.moveToNext());
}
Log.d("getAllPartes()", partes.toString());
//Return partes
return partes;
}
Si ahora tengo que hacer todo esto para la siguiente tabla... no es un proceso MUY precario? o es así y ya está? la verdad es que sería una vez y ya, pero aún así me parece raro.
Un poquito de luz, por favor!
Gracias de antemano