[SQL] 안드로이드에서 준비된 문으로 쿼리?
SQL안드로이드에서 준비된 문으로 쿼리?
안드로이드에서 android.database.sqlite.SQLiteStatement 나를 주입 공격을 피하기 위해 SQLite는에 준비된 문을 사용할 수 있습니다. 그것의 실행 방법은 / 업데이트 / 삭제 작업을 만들 적합하지만 커서 또는 반환 등의 쿼리에 대한 방법이있을 것 같지 않습니다.
이제 아이폰 OS에 나는 * 형 sqlite3_stmt의 준비된 문을 만들고 난이 SQLite는의 제한되지 않습니다 알 수 있도록, 쿼리를 사용합니다. 어떻게 안드로이드에서 준비된 문으로 쿼리를 수행 할 수 있습니다?
해결법
-
==============================
1.준비된 문을 사용하면 두 가지를 수행 할 수 있습니다
준비된 문을 사용하면 두 가지를 수행 할 수 있습니다
(- 여기에서 볼 afiak sqlite3_prepare_v2되지 않음) 그러나 그것은 그렇지 않으면 당신은 컴파일 된 SQL 문을 캐시 오류 MAX의 크기에 도달되지 수 사용합니까 정확히 / 안드로이드 SQLite는 구현이 실제로 sqlite3_prepare를 사용하는 경우 모르겠어요.
그래서 당신은 당신은 내가 SQLiteStatement으로 작업을 수행하는 알고있는 방법이 없습니다 구현에 의존 할 필요가 데이터베이스를 조회 할 경우.
사출 안전, 모든 데이터베이스 쿼리, 삽입 등의 방법에 관한 것은 바인드 인수로 허용 (때로는 대안) 버전이 있습니다.
예를 들면 당신의 커서를 얻으려면
SELECT * FROM table WHERE column1='value1' OR column2='value2'
커서의 SQLiteDatabase # rawQuery (
)
Cursor c1 = db.rawQuery( "SELECT * FROM table WHERE column1=? OR column2=?", new String[] {"value1", "value2"} );
커서의 SQLiteDatabase # 쿼리 (
)
Cursor c2 = db.query("table", null, "column1=? OR column2=?", new String[] {"value1", "value2"}, null, null, null);
ContentProviders 통해 -이 경우는 추상적 인 공급자가 아닌 데이터베이스와 상호 작용하면 이후 약간 다릅니다. 컨텐트 프로를 백업 SQLite는 데이터베이스가 있음을 보장 acutally 없습니다. 당신이 거기에 어떤 열 알지 못한다면 그래서 / 공급자가 내부적으로 어떻게 작동하는지 당신은 문서의 말씀에 충실해야한다.
커서 컨텐트 리졸버 # 쿼리 (
)
Cursor c3 = getContentResolver().query( Uri.parse("content://provider/table"), null, "column=? OR column2=?", new String[] {"value1", "value2"}, null);
힌트 : 당신이 여기 제한 할 경우 ORDER BY 절에 추가 할 수 있습니다 :
String sortOrder = "somecolumn LIMIT 5";
또는 컨텐트 프로 바이더의 구현에 따라서는 열린 우리당에 매개 변수로 추가 :
Uri.parse("content://provider/table?limit=5"); // or better via buildUpon() Uri audio = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; audio.buildUpon().appendQueryParameter("limit", "5");
모든 경우에 ? 당신이 바인드 인수에 무엇을 넣어의 탈출 버전으로 대체됩니다.
? + "hack'me"= 'hack''me'
from https://stackoverflow.com/questions/9857073/queries-with-prepared-statements-in-android by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 나는 CASCADE DELETE 규칙을 사용해야합니까? [복제] (0) | 2020.06.03 |
---|---|
[SQL] 어떻게 PostgreSQL 데이터베이스 테이블의 컬럼의 위치를 변경합니까? (0) | 2020.06.03 |
[SQL] 오라클에 삽입하여 생성 된 시퀀스 ID를 입수 (0) | 2020.06.03 |
[SQL] 어떻게 NULL 값은 데이터베이스 검색의 성능에 영향을합니까? (0) | 2020.06.03 |
[SQL] 다른 테이블의 데이터를 하나 개의 테이블에서 업데이트 된 행이 각각 동일하고 하나의 열에 기초 (0) | 2020.06.03 |