2016-12-01 35 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會更加靈活。