2
我正在開發Android 1.6以上的燃料使用應用程序。捆綁在v1.6上的SQLite不會執行外鍵,所以我不得不手動處理它。到目前爲止,我已經使用Android交易完成了這項工作: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;
}
I.e.除非數據庫中有匹配的車輛註冊號碼,否則不能輸入燃料數據。
我的問題是,有沒有更好的方法來做到這一點?我不是數據庫專家,但我知道你可以設置觸發器來執行規則 - 觸發器是否更適合處理約束?
乾杯, 巴里