2016-12-01 6 views
0

Ich verwende den Befehl execSQL, um Daten in eine Tabelle einzufügen, die einen Fremdschlüssel enthält.Verwenden von ContentValues ​​zum Einfügen in Fremdschlüsselfeld

So mache ich derzeit.

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); 

Ich möchte Inhaltsanbieter verwenden, um Daten in meine Datenbank einzufügen. Momentan kann ich den Inhaltsanbieter jedoch nicht zum Einfügen meiner Daten verwenden, da ich keinen Inhaltswert für dieses Fremdschlüsselfeld erstellen kann.

contentValue.put(SunshineContract.WeatherEntry.COL_LOC_KEY, 'SELECT " + 
      SunshineContract.LocationEntry._ID + " FROM "+ SunshineContract.LocationEntry.TABLE_NAME + " WHERE "+ 
      SunshineContract.LocationEntry._ID + " = 1)' 

Gibt es eine Methode, die Daten in Tabelle mit Fremdschlüssel mit ContentValues einsetzen kann, so dass ich ContentResolver verwenden kann?

+0

In den meisten Szenarien werden die Daten von Web-API (JSON oder XML) kommen und Sie müssen diese JSON in einige Java-Datenobjekt analysieren. Dann müssen Sie nur Attribute dieses Java-Datenobjekts als ContentValue beim Einfügen in eine Tabelle setzen. Können Sie die Hintergrundgeschichte Ihres Problems näher erläutern? –

Antwort

0

Der ganze Sinn des Objekts ContentValues besteht darin, Werte anzugeben, die nicht als Ausdruck interpretiert werden können, um zu verhindern, dass fremde Apps SQL-Code in die App einfügen, die den Inhaltsanbieter implementiert.

Dies bedeutet, dass eingefügte Werte nicht dynamisch nachgeschlagen werden können. Sie müssen zuerst die Werte aus der Datenbank lesen und sie in ein ContentValues Objekt einfügen (für den zweiten Schritt gibt es einen helper function).

Wenn Sie auf Ihre eigene Datenbank zugreifen, sollten Sie keinen Inhaltsanbieter verwenden. mit SQLiteDatabase wäre flexibler.

Verwandte Themen