Ich arbeite an einer Kraftstoffanwendung, die auf Android 1.6 und höher laufen soll. Die gebündelte SQLite auf v1.6 nicht tun, Fremdschlüssel, so musste ich es manuell zu behandeln. Bislang habe ich dies mit einer Android-Transaktion getan:
public static long addFuelUp(String registrationNumber, String date)
{
SQLiteDatabase db = uKMpgData.getReadableDatabase();
long result = -1;
ContentValues values = new ContentValues();
Cursor vehicleCursor = VehicleDataProvider.getVehicle(registrationNumber);
if(vehicleCursor.moveToNext())
{
Cursor fuelUpsCursor = getFuelUps(registrationNumber, date);
if(!fuelUpsCursor.moveToNext())
{
db.beginTransaction();
try
{
values.put(REGISTRATION_NO_COLUMN, registrationNumber.replace(" ", ""));
values.put(DATE_TIME_COLUMN, date);
result = db.insertOrThrow(FUEL_USE_TABLE_NAME, null, values);
db.setTransactionSuccessful();
}
catch(SQLException e)
{
Log.d("addFuelUp", e.getMessage());
}
finally
{
db.endTransaction();
vehicleCursor.close();
fuelUpsCursor.close();
}
}
}
return result;
}
D.h. Kraftstoffdaten können nur eingegeben werden, wenn ein entsprechendes Fahrzeugkennzeichen in der Datenbank vorhanden ist.
Meine Frage ist, ob es einen besseren Weg gibt, dies zu tun? Ich bin kein Datenbankexperte, aber ich weiß, dass man Trigger einrichten kann, um Regeln durchzusetzen - sind Trigger besser geeignet, um Constraints zu handhaben?
Zum Wohl, Barry