tableColumns
null
모든 열에 대해 SELECT * FROM ...
new String[] { "column1", "column2", ... }
특정 컬럼에 대해 같이 SELECT column1, column2 FROM ...
- 당신은 또한 여기에 복잡한 식을 넣을 수 있습니다 :
new String[] { "(SELECT max(column1) FROM table1) AS max" }
당신의 이름 열 줄 것 max
의 최대 값을 들고column1
whereClause
WHERE
그 키워드없이 뒤에 넣은 부분 , 예 :"column1 > 5"
?
동적 인 것을 포함해야합니다 . 예 : "column1=?"
-> 참조whereArgs
whereArgs
- 각을 채우는 내용 지정
?
에 whereClause
나타나는 순서를
다른 사람
- 단지 같은
whereClause
키워드 후 또는 문 null
당신이 그것을 사용하지 않는 경우.
예
String[] tableColumns = new String[] {
"column1",
"(SELECT max(column1) FROM table2) AS max"
};
String whereClause = "column1 = ? OR column1 = ?";
String[] whereArgs = new String[] {
"value1",
"value2"
};
String orderBy = "column1";
Cursor c = sqLiteDatabase.query("table1", tableColumns, whereClause, whereArgs,
null, null, orderBy);
// since we have a named column we can do
int idx = c.getColumnIndex("max");
다음 원시 쿼리와 동일합니다.
String queryString =
"SELECT column1, (SELECT max(column1) FROM table1) AS max FROM table1 " +
"WHERE column1 = ? OR column1 = ? ORDER BY column1";
sqLiteDatabase.rawQuery(queryString, whereArgs);
Where / Bind -Args 버전을 사용하면 자동으로 이스케이프 된 값을 얻고 입력 데이터에 '
.
안전하지 않음 : String whereClause = "column1='" + value + "'";
안전 :String whereClause = "column1=?";
값에 '
문이 포함되어 있으면 문이 중단되고 예외가 발생하거나 의도하지 않은 일이 발생하기 때문입니다. 예를 들어 value = "XYZ'; DROP TABLE table1;--"
문이 두 문과 주석이되기 때문에 테이블을 삭제할 수도 있습니다.
SELECT * FROM table1 where column1='XYZ'; DROP TABLE table1;--'
args 버전을 사용하면 XYZ'; DROP TABLE table1;--
로 이스케이프되고 'XYZ''; DROP TABLE table1;--'
값으로 만 처리됩니다. 을해도 '
나쁜 일을하는 것은 아니다 아직도 사람들이 자신의 이름에 그것을 가지고 또는 텍스트에 사용하는 것이 매우 일반적이며, 파일 이름, 암호 등 그래서 항상 인수 버전을 사용합니다. ( 그래도 int
직접 빌드 및 기타 프리미티브 는 괜찮습니다 whereClause
)