Estoy tratando de familiarizarme con Android y su base de datos API. He creado una clase que hereda de SQLiteOpenHelper y esto es cómo crear la tabla en la base de datosSQLiteDatabase.insertOrThrow no tira pero no se insertan datos
@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 función que se utiliza para agregar datos a la base de datos es la siguiente implemeneted dentro de la misma clase es
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();
}
pero aparentemente no se han agregado datos. El returnValue es siempre 1. El método no arroja, y cuando saco el DB con adb y miro su contenido, está totalmente vacío.
Simplemente no puedo entender lo que me estoy perdiendo.
Cualquier sugerencia sería apreciada.
Gracias, S
Muchas gracias. Ahora funciona. Realmente me pregunto cómo llamar a las cosas desordenadas, y por qué la inserción no arroja. De todos modos, muchas gracias! – emitrax
De nada. Creo que no se lanza una excepción porque no hay nada particularmente malo con su declaración de inserción, y no está violando ninguna restricción de tabla, etc. En cambio, las cosas se mezclan en las llamadas a múltiples transacciones. Tendré que investigar un poco más para ver por qué la transacción anidada se comporta de la manera en que lo hace. Entiendo por qué no insertaría nada, pero el hecho de que se devuelva una identificación es extraño. – McStretch
¡Esto es realmente extraño! El código fuente de SQLiteOpenHelper ciertamente no abre ninguna transacción a excepción de la creación y actualización de la base de datos. ¡Entonces, después de que la llamada getWriteableDatabase() retorna, no hay transacciones activas para la base de datos! O algo realmente pervertido está funcionando, o esta respuesta es falsa. – Nakedible