我正在开发一款将在Android 1.6及更高版本上运行的燃料使用应用程序。 v1.6上捆绑的SQLite不执行外键,因此我必须手动处理它。到目前为止,我使用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;
}
即。除非数据库中有匹配的车辆登记号,否则无法输入燃料数据。
我的问题是,有更好的方法吗?我不是数据库专家,但我知道你可以设置触发器来强制执行规则 - 更适合处理约束的触发器吗?
干杯, 百里
答案 0 :(得分:0)
触发器可以很好地解决这个问题。
实际上,有一种自动生成触发器来模拟外键的方法。 SQLite for PC提供了一个名为" genfkey"它可以检查使用外键的现有数据库并输出相应的触发器。