2012-07-22 2 views
1

database.insert()과 함께 사용하면 Android의 ContentValues가 자동으로 콘텐츠를 탈출합니까?ContentValues를 통해 SQLite INSERT 삽입

예 : 자동으로 다른 시간에하지만 이스케이프처럼

String message = "This is a sample that doesn't have a single quote"; 

ContentValues values = new ContentValues(); 
values.put(DBManagement.MESSAGE, message); 
values.put(DBManagement.TIME, (int) (System.currentTimeMillis()/1000)); 
database.insert(DBManagement.TABLE_NAME, null, values); 

것 같습니다.

예, 저는 rawQuery을 사용하고 입력을 매개 변수화하여 다른 쿼리에서 이스케이프 및 주입으로부터 보호합니다.

거래가 무엇입니까?

+0

"시간이 지나면 자동으로 이스케이프되지만 다른 것은 자동으로 이스케이프 처리 된 것처럼 보입니다." - 언제? – CommonsWare

+0

값이 이스케이프되지 않은 경우에 대한 예를 생각해 낼 수 있습니까? 내가 아는 바로는 준비된 문장이 SQLiteDatabase에 의해 사용되기 때문에 이스케이프가 필요하지 않다는 것이다. 방금 Jelly Bean 소스 코드를 확인하고 SQLiteDatabase.insert에서 SQLiteConnection.bindArguments로 모든 메서드 호출을 추적했습니다. 인수는 고유 코드에 개별적으로 전달되며 SQL 쿼리에 삽입되지 않습니다. – tiguchi

+0

예. 다음과 같은 오류 메시지가 나타납니다 :'android.database.sqlite.SQLiteException : near "t": 구문 오류 : 컴파일 중 INSERT INTO 설정 SET value = '정말로 필요하다고 생각하지 않습니다', key = 'setting_option1' '. 참조되는 라인은'database.insert (....); 코드입니다. 제가 잘못 해석 했습니까? –

답변

1

문제가 해결되었습니다. 어떤 이유로이 문제를 해결하기 위해 데이터베이스 버전을 늘려야했습니다. 완료되면 더 새로운 DB에는 더 이상 문제가 없습니다.

또한 예, ContentValues는 콘텐츠를 이스케이프 처리해야합니다.

+1

나는 네가 틀렸다고 믿는다. 'ContentValues'는 문자를 자동으로 이스케이프하지 않습니다. 나는 그걸로 조금 문제가 있었는데, 그것은 말이 안된다. PHP에서 mysql_real_escape_string과 같이 작동 할 것이라고 생각했지만 불행히도 그렇게하지는 않습니다. 가치를 묶어서 더 안전하게 만들겠다고 주장하지만 실제로 그렇게하지는 않습니다. – Andy