Non sono sicuro se io sono l'unico che si sente in questo ...Interrogazione e lavorare con i cursori a SQLite su Android
trovo a lavorare con l'API SQLite in Android un dolore completo nel culo e abbastanza anima distruggendo . Qualcuno ha qualche consiglio/aiuto per rendermi la vita più facile?
Ecco un esempio di ciò di cui sto parlando.
//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)));
Questo è un semplice esempio di creazione di un oggetto cliente semplice da una query db; parte del mio codice è molto più malvagio di questo. La creazione manuale di query in questo modo porta a tutti i tipi di errori che non trovo fino al runtime.
Qualsiasi consiglio molto apprezzato!
Ok, dopo i suggerimenti di seguito ora ho questo:
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);
nel cliente, accedo i campi come questo
mName = cursor.getString(2)
Ahh, mi sento molto meglio :)
Cheers Si
Bene, senza offesa, a volte in realtà devi scrivere del codice :) Le piattaforme mobili non forniscono la stessa astrazione dei sistemi operativi desktop. –
ah, quella cosa 'getColumnIndexOrThrow' mi sta uccidendo ... non potrebbero creare un overload' getString' che prende direttamente il nome della colonna ??? –