2013-01-07 4 views
1

나는 내가 SimpleCursorAdapter를 사용할 수 있도록 _id를 만들기 위해 기본 키에 별명을 가진 쿼리를 실행하는 데 사용 rawquery을 실행하기 위해 노력하고있어, 이것은 내가 무엇을 가지고 :안드로이드 SQLite는 rawquery 선택 인수 문제

String sel = DatabaseListDB.COLUMN_DATABASE_NAME; 
Cursor results = db.rawQuery("SELECT ? as _id FROM DatabaseList", 
    new String[] {sel}); 
내 SqlLiteHelperClass

public static final String COLUMN_DATABASE_NAME = "databaseName"; 

에서

는 열 내가 원하는 이름과 내 기본 키입니다. 문제는 내가이 쿼리를 실행하면 결과가 'databaseName'이 실제 값 대신 테이블의 값으로 나타납니다. 나는

Cursor results = db.rawQuery("SELECT databaseName as _id FROM DatabaseList", 
    null); 

같이 쿼리를 실행할 수 있으며 그것을 잘 작동하고 내가 제대로 selectionargs를 사용하지 못할 이유를 모르겠어요. 아무도 내가이 문제를 해결하도록 도울 수 있습니까?

+0

: 귀하의 경우에, 당신은 단순히 당신의 쿼리를 변경해야 28Java.lang.String, % 20java.lang.String [] % 29) 정확히 selectionargs가 무엇을 의미합니까? SQL 쿼리 –

+0

에서 condition은 커서 어댑터를 사용하는 경우 _id 열의 _id 열을 원할 것입니다. – njzk2

답변

1

developer.android.com에서 "?" where 절에서 쿼리 할 열이 아닙니다.

  • selectionArgs : whereArgs를 쿼리에 포함하면 selectionArgs의 값으로 바뀝니다. 값은 문자열로 바인딩됩니다.
2

?WHERE 인수로 사용됩니다. 당신이 ([여기] http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery%를 볼 필요가

Cursor results = db.rawQuery(String.format("SELECT %s as _id FROM DatabaseList", sel)); 
+0

오, 고마워, 왜 그런가? 쿼리의 나머지 부분을 수행하는 것과 같은 방식으로 쿼리를 수행하는 대신 쿼리의 where 부분에 사용하는 것이 무엇입니까? – graeme

+0

'? '를 지원하기 위해 내가 아는 이유 중 하나는 [악의적 인 SQL 삽입] (http://www.imperva.com/resources/glossary/sql_injection.html)을 피하고 또한 프리미티브 입력을 자동으로 처리하는 것입니다. – waqaslam