我正在使用execSQL
命令将数据插入到包含外键的表中。
这就是我目前的工作方式。
String query = "INSERT INTO "+ SunshineContract.WeatherEntry.TABLE_NAME +" ( "+
SunshineContract.WeatherEntry.COL_LOC_KEY + ", "+
SunshineContract.WeatherEntry.COL_WIND_SPEED+ ", "+
SunshineContract.WeatherEntry.COL_DEGREE+ ") VALUES ((SELECT " +
SunshineContract.LocationEntry._ID + " FROM "+ SunshineContract.LocationEntry.TABLE_NAME + " WHERE "+
SunshineContract.LocationEntry._ID + " = 1 ), "+
80, 98);";
sqLiteDatabaseWritable.execSQL(query);
我想使用内容提供程序将数据插入到我的数据库中。但目前,我无法使用内容提供程序插入我的数据,因为我无法为此外键字段构造内容值。
contentValue.put(SunshineContract.WeatherEntry.COL_LOC_KEY, 'SELECT " +
SunshineContract.LocationEntry._ID + " FROM "+ SunshineContract.LocationEntry.TABLE_NAME + " WHERE "+
SunshineContract.LocationEntry._ID + " = 1 )'
是否有任何方法可以使用ContentValues
将数据插入到包含FOREIGN KEY的表中,以便我可以使用ContentResolver
?
答案 0 :(得分:0)
ContentValues
对象的重点是提供无法解释为表达式的值,以防止外来应用程序将SQL代码注入实现内容提供程序的应用程序。
这意味着您无法动态查找插入的值。
您必须先从数据库中读取值,然后将它们放入ContentValues
对象(第二步有helper function)。
如果您要访问自己的数据库,请考虑根本不使用内容提供商;使用SQLiteDatabase
会更灵活。