Consultando y trabajando con cursores en SQLite en Android

No estoy seguro si soy el único que siente esto ...

Encuentro que trabajar con la API de sqlite en Android es un completo dolor en el trasero y la destrucción del alma bonita. ¿Alguien tiene algún consejo o ayuda para hacer mi vida más fácil?

Aquí hay un ejemplo de lo que estoy hablando.

//create code

db.execSQL("CREATE TABLE " + CUSTOMER_TABLE_NAME + " ("
                        + GENERIC_ID_KEY+ " INTEGER PRIMARY KEY NOT NULL, " 
                        + PHONE_KEY + " INTEGER NOT NULL, "
                        + CUSTOMER_NAME_KEY+ " TEXT NOT NULL, "
                        + EMAIL_KEY + " TEXT NOT NULL, "
                        + ADDRESS_KEY +" TEXT);");


//get code
    Cursor mCursor = mDb.query(true, CUSTOMER_TABLE_NAME, new String[] {GENERIC_ID_KEY,
                        ADDRESS_KEY, PHONE_KEY, EMAIL_KEY,CUSTOMER_NAME_KEY}, GENERIC_ID_KEY + "=" + customerDbId, null,
                                null, null, null, null);

        Customer customer = new Customer (customerDbId, (CharSequence)mCursor.getString(mCursor.getColumnIndexOrThrow(CUSTOMER_NAME_KEY)),
                            (CharSequence)mCursor.getString(mCursor.getColumnIndexOrThrow(PHONE_KEY)),
                            (CharSequence)mCursor.getString(mCursor.getColumnIndexOrThrow(EMAIL_KEY)),
                            (CharSequence)mCursor.getString(mCursor.getColumnIndexOrThrow(ADDRESS_KEY)));

Este es un ejemplo simple de crear un objeto de cliente simple a partir de una consulta db; parte de mi código es mucho más desagradable que esto. Las consultas de elaboración manual de esta manera conducen a todo tipo de errores que no encuentro hasta el tiempo de ejecución.

Cualquier consejo muy apreciado!

Ok, después de los siguientes consejos ahora tengo esto:

  db.execSQL("CREATE TABLE customer (_id INTEGER PRIMARY KEY NOT NULL, " 
                        + "phone_number INTEGER NOT NULL, "
                        + "name TEXT NOT NULL, "
                        + "email TEXT NOT NULL, "
                        + "address TEXT);");


    //get code
String q = "SELECT * FROM customer WHERE _id = " + customerDbId +";"
        Cursor mCursor = mDb.rawQuery(q, null);

        Customer customer = new Customer (mCursor);

En el Cliente, accedo a los campos como este.

mName = cursor.getString(2)

Ahh, me siento mucho mejor :)

Saludos si

Respuestas a la pregunta(2)

Su respuesta a la pregunta