2013-05-21 3 views
0

나는 나에게 빈 커서 제공이 rawQuery 썼다 :rawQuery 인수 이상한 동작?

String query = "SELECT * FROM " + TBL_NAME + " WHERE ? = ?"; 
String[] args = new String[] {COL_NAME, Long.toString(id)}; 
Cursor c = db.rawQuery(query, args); 

을하지만 난이 예상되는 결과를 다음 쿼리를 얻을 경우 :

String query = "SELECT * FROM " + TBL_NAME + " WHERE " + COL_NAME + " = " + Long.toString(id); 
Cursor c = db.rawQuery(query, null); 

나는 테이블 이름을 사용할 수 없다는 수집 'rawQuery'메소드의 인수 중 하나입니다. 그러나 나는 왜 그럴 수 있는지 확신하지 못한다. (나는 그것을 ''로 둘러싼다고 추측하지만 그것은 단지 추측이다.)

그 외에도 args는 쿼리에 사용자 입력을 포함하기 위해서만 사용되어야한다는 결론을 내 렸습니다. 그 점에 대해서는 SQLiteStatement을 사용하는 것이 더 낫습니다.

요약 : 어디에서 (왜 가능한지) shoul 나는 문자열을 병합 한 대신 rawQuery에서 args를 사용합니다. 왜 SQLiteStatement (또는 단순히 쿼리) 대신 rawQuery를 사용해야합니까?

답변

1

내가 아는 한 COL_NAME은 (는) "?"로 바꿀 수 없습니다. Android에만 "?"

final String[] args = new String[] {Long.toString(id)}; 
final Cursor c = db.query(TBL_NAME, null, COL_NAME + "=?", args, null, null, null); 
+0

나는 문서의 알고 있었다 :하지 "선택"으로 "인수"

final String query = "SELECT * FROM " + TBL_NAME + " WHERE COL_NAME=?"; final String[] args = new String[] {Long.toString(id)}; final Cursor c = db.rawQuery(query, args); 

또는 더 나은 사용은 이렇게 될 것입니다 귀하의 경우에는이 방법

query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) 

로 그러나 나는 다음과 같이 missleading 중 하나라고 생각합니다. "검색어에? where를 포함 할 수 있습니다. ** selectArgs의 값으로 대체됩니다."_ 및 Where 절에서 사용합니다 (with잘못된 결과). 당신의 대답을 받아들이지 않았습니다. 내가 가진 rawQuery와 (그리고없는) args, SQLiteStatement 그리고 심지어 쿼리의 차이점 (관련이 있다면)에 관심이 있습니다. 내 마음에 혼란스러워지기 시작했다. – Asincrono

+0

If "chooseArgs의 값으로 대체하십시오"라고 말합니다. COL_NAME은 (는) "selection"이라고하고 "id"는 "selectionArgs"입니다. 그것이 작동하지 않는 이유입니다. –