2012-01-12 3 views
25

하나의 안드로이드 데이터베이스 애플리케이션을 개발 중입니다. 나는 단지 어떤 코드가 더 빨리 실행되는지 그리고 그 코드의 차이점을 알고 싶을 뿐이다.Android SQLite : 어떤 검색어 ('검색어'또는 'rawQuery')가 더 빠릅니까?

쿼리 - 1 =

db.rawQuery("select * from user_table where user_id =" + userId, null); 

쿼리 - 2 =

db.query(USER_TABLE_NAME, ALL_COLUMNS, "user_id = " + userId, null, null, null, null); 
+0

... 시도해 보시나요? 나는 모든 의도와 목적에 대해 "같은"것을 추측 할 것입니다. 그러나 * 두 경우 모두 자리 표시자를 사용하십시오. –

+0

빌드 시스템을 이미 설정 한 경우 벤치 마크를 수행하십시오. 또한, 어떤 종류의 작업량을 기대하고 있으며 속도면에서 어떤 마진을 찾고 있습니까? –

답변

15

를 사용하여 쿼리.

Android에서 검색어를 사전 컴파일하고 너무 많은 원시 검색어를 사용하면 성능 문제가 발생할 수 있습니다.

절대적으로 필요한 경우에만 rawQuery를 사용하십시오.

또한 두 가지 예 모두 SQL 인젝션이라는 주요 보안 문제가 있습니다.

userId를 삭제해야합니다. 안드로이드하게됩니다

할 수있는 가장 확실한 것은 사용하여 작업을 수행합니다 안드로이드 소스에 SQLiteDatabase.java 보면

db.query(USER_TABLE_NAME, ALL_COLUMNS, "user_id = ?", new String[] {userId}, null, null, null); 
+3

RE 사전 컴파일 된 쿼리 : PreparedStatement를 사용할 때만 적용됩니다. Query()는 문자열을 작성하여 rawQuery()에 전달합니다. –

+0

글쎄, PreparedStatement 같은 쿼리를 여러 번, 사실, 실행하는 의미가 있지만 일종의 최적화 드라이버에 의해 수행되는 생각합니다. 너무 많은 성명서가 제공되었다고 불평하는 안드로이드에 대한 여러 가지 다른 쿼리를 사용할 때 어떤 오류가 발생했습니다. :) –

+0

@ JonAdams 'preparedstatement를 사용할 때만 적용됩니다'라는 귀하의 의견을 이해할 수 있도록 도와주십시오. rawQuery를 통해 달성 할 수있는 반면에 preparedstatement는 어디에 사용합니까? (예 : '?'를 넣고 인수를 전달할 수 있습니다.) – Darpan

5

쿼리 (..)를 구축하기 위해 QueryBuilder를 호출 끝나는 것을 보여준다 쿼리를 단일 문자열로 사용한 다음 rawQuery()를 호출합니다. 당신이 자신의 진술을 만들기 위해 똑같은 일을했다는 것을 전제로한다면, 그들은 대략 동일해야합니다.

관련 문제