Android транзакция или триггер? - PullRequest
2 голосов
/ 02 апреля 2011

Я работаю над приложением по использованию топлива, которое будет работать на 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

1 Ответ

0 голосов
/ 16 января 2012

Триггеры были бы хорошим решением этой проблемы.

На самом деле существует автоматический способ генерации триггеров для имитации внешних ключей.SQLite для ПК предоставляет утилиту genfkey, которая может проверять существующую базу данных, которая использует внешние ключи и выводит соответствующие триггеры.

...