2016-12-01 5 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)' 

내가 ContentResolver을 사용할 수 있도록 ContentValues를 사용하여 외부 키를 포함하는 테이블에 데이터를 삽입 할 수있는 방법이 있습니까?

+0

대부분의 시나리오에서 데이터는 웹 API (json 또는 xml)에서 가져오고 해당 json을 일부 Java 데이터 객체로 구문 분석해야합니다. 그런 다음 테이블에 삽입 할 때이 Java 데이터 객체의 속성을 ContentValue로 지정하면됩니다. 문제의 배경에 대해 더 설명해 주시겠습니까? –

답변

0

ContentValues 개체의 요점은 외부 앱이 콘텐츠 공급자를 구현하는 앱에 SQL 코드를 삽입하지 못하도록 표현식으로 해석 할 수없는 값을 제공하는 것입니다.

즉, 동적으로 삽입 된 값을 조회 할 수 없습니다. 먼저 데이터베이스에서 값을 읽고 ContentValues 오브젝트에 넣어야합니다 (두 번째 단계는 helper function입니다).

데이터베이스에 액세스하는 경우 콘텐츠 제공 업체를 전혀 사용하지 않는 것이 좋습니다. SQLiteDatabase을 사용하면 더욱 유연 해집니다.