2016-12-01 34 views
0

我正在使用execSQL命令将数据插入包含外键的表中。使用ContentValues插入FOREIGN KEY字段

这就是我目前所做的。

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,这样我可以使用ContentResolver FOREIGN KEY的任何方法?

+0

在大多数情况下,数据将来自web api(json或xml),您将不得不将该json解析为一些java数据对象。然后,只需将此java数据对象的属性作为ContentValue插入到表中即可。你能解释一下你的问题的背景故事吗? –

回答

0

ContentValues对象的全部重点是提供不能被解释为表达式的值,以防止外部应用程序向实现内容提供者的应用程序注入SQL代码。

这意味着您无法动态查找插入的值。 您必须首先从数据库读取值,然后将它们放入ContentValues对象(第二步有helper function)。

如果您正在访问自己的数据库,请考虑不要使用内容提供者;使用SQLiteDatabase会更加灵活。