Я работаю над приложением по использованию топлива, которое будет работать на Android 1.6 и выше. В комплекте SQLite на v1.6 не используются внешние ключи, поэтому мне пришлось обрабатывать его вручную. Пока что я сделал это с помощью транзакции Android:
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;
}
т.е. Данные о топливе не могут быть введены, если в базе данных нет соответствующего регистрационного номера автомобиля.
Мой вопрос: есть ли лучший способ сделать это? Я не эксперт по базам данных, но я знаю, что вы можете настроить триггеры для обеспечения соблюдения правил - триггеры больше подходят для обработки ограничений?
Ура,
Barry