2017-04-02 5 views
0

내 DB 기반 앱에서 하나 이상의 필드 값이 하위 쿼리에서 오는 쿼리에 삽입을 수행해야합니다.안드로이드 SQLite 하위 쿼리에서 오는 값을 가진 테이블에 삽입

문에 삽입이 다음 예처럼 보일 수 있습니다 : 현재

INSERT INTO MyTable (field_1, field_2) 
VALUES('value for field 1', (SELECT field_x FROM AnotherTable WHERE ...)) 

내가 그것을 수동으로 쿼리를 작성하고있는 중이 야 :

String MyQuery = "INSERT INTO mytable (field_1, field_2) 
    VALUES('value for field 1', (SELECT field_x FROM AnotherTable WHERE ...))"; // Of course my query is far more complex and is built in several steps but the concept is safe, I end up with a SQL String 

SQLiteDatabase= db = getWritableDatabase(); 

db.execSQL(MyQuery); // And it works flawlessy as it was a Swiss Clock 

것은 내가 대신 할 싶은 무엇이다 :

SQLiteDatabase db = getWritableDatabase(); 
ContentValues values = new ContentValues(); 

values.put("field_1", "value for field 1"); 
values.put("field_2", ThisIsAQuery("(SELECT field_x FROM AnotherTable WHERE ...)")); 

db.insert("MyTable", null, values); 
db.close(); 

가짜 방법 ThisIsAQuery (...)는 누락 된 부분입니다. hat은 "SELECT .."가 값이 아니라 insert 문에 임베드되어야하는 쿼리를 쿼리 작성자에게 알려야합니다.

이 방법이 있습니까?

답변

0

ContentValues 컨테이너의 전체적인 점은 SQL 명령으로 해석하지 않고 문자열을 안전하게 사용할 수 있어야합니다.

insert()과 함께 하위 쿼리를 사용할 수 없습니다. 다른 테이블에서 값을 가져 오는 유일한 방법은 별도의 쿼리를 실행하는 것입니다. 이 경우 ThisIsAQuery()stringForQuery() 또는 longForQuery()이됩니다.