Sto cercando di familiarizzare con Android e la sua API di database. Ho creato una classe che eredita da SQLiteOpenHelper e questo è come creo la tabella nel databaseSQLiteDatabase.insertOrThrow non gira ma non vengono inseriti i dati
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL("CREATE TABLE " + FUELS_TABLE_NAME + " ("
+ "_ID INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "DATE_OF_FUELS DATE DEFAULT CURRENT_TIME,"
+ "SELLER_POSITION TEXT DEFAULT 'unknown',"
+ "AMOUNT REAL"
+ ");"
);
} catch (SQLException e) {
Log.e(DATABASE_NAME, e.toString());
}
}
La funzione utilizzata per aggiungere dati al DB è la seguente implemeneted all'interno della stessa classe è
public void addNewFuel(float amount) {
// Create the content to insert into the database
ContentValues newEntry = new ContentValues();
newEntry.put("amount", amount);
// Get database handler
try {
db = getWritableDatabase();
} catch (SQLException e) {
Log.e(DATABASE_NAME, e.toString());
return;
}
// Begin transaction and insert data
long returnedValue;
db.beginTransaction();
try {
returnedValue = db.insertOrThrow(FUELS_TABLE_NAME, null, newEntry);
Log.v(DATABASE_NAME, "return value " + returnedValue);
} catch (SQLException e) {
Log.e(DATABASE_NAME, e.toString());
} finally {
db.endTransaction();
}
db.close();
}
ma apparentemente nessun dato è stato aggiunto. Il valore restituito è sempre 1. Il metodo non lancia, e quando estraggo il DB con adb e guardo il suo contenuto è completamente vuoto.
Non riesco proprio a capire cosa mi manca.
Qualsiasi suggerimento sarebbe apprezzato.
Grazie, S
Grazie mille. Ora funziona. Mi sto davvero chiedendo come si fa a fare casino e perché l'inserto non getta. Comunque, grazie mille! – emitrax
Prego. Penso che non venga generata un'eccezione perché non c'è niente di particolarmente sbagliato nella tua istruzione di inserimento, e non stai violando alcun vincolo di tabella, ecc. Invece le cose si confondono nelle chiamate a più transazioni. Dovrò fare ulteriori ricerche per capire perché la transazione nidificata si comporta come fa. Capisco perché non dovrebbe inserire nulla, ma il fatto che un ID venga restituito è strano. – McStretch
Questo è davvero strano! Il codice sorgente per SQLiteOpenHelper non apre certamente nessuna transazione tranne la creazione e l'aggiornamento del database. Quindi, dopo che la chiamata getWriteableDatabase() restituisce, nessuna transazione è attiva per il database! O qualcosa è veramente fasullo, o questa risposta è falsa. – Nakedible