2011-07-03 6 views
6

테이블을 생성하는 다음 코드가 있습니다. 나는이SQL 쿼리 문제 Android Where 절

_id  date  recordName  total 
-------------------------------------- 
7  2011  TestMaxRecord  5 

자바 코드처럼 보이는 그것으로 데이터를 삽입 :

public static final String KEY_ROWID = "_id"; 
public static final String KEY_DATE = "date"; 
public static final String KEY_TOTAL = "total"; 
public static final String KEY_RECORD_NAME = "recordName"; 

private static final String DATABASE_CREATE_RECORDS = "create table " + DATABASE_TABLE_RECORDS + " (" 
+ KEY_ROWID + " integer primary key autoincrement, " 
+ KEY_DATE + " text not null, " 
+ KEY_RECORD_NAME + " text not null, " 
+ KEY_TOTAL + " text not null);"; 

public Cursor getRecord(String name) throws SQLException { 
    return mDb.query(true, DATABASE_TABLE_RECORDS, new String[] {KEY_ROWID, KEY_DATE, KEY_RECORD_NAME, KEY_TOTAL}, KEY_RECORD_NAME + " = " + name, null, null, null, null, null); 
} 

그것은 때마다 예외가 발생 어디에 이름 = "TestMaxRecord"(에도 불구하고 거기에서 데이터가있는) 다음 오류를

android.database.sqlite.SQLiteException : 그런 칼럼 : TestMaxRecord : 컴파일하는 동안 : SELECT DISTINCT _id, 날짜, recordName, 기록에서 총 recordName = TestMaxRecord

내게 열 제목 TestMaxRecord을 찾고있는 것처럼 보입니다. 나는 안드로이드 초보자지만,이 부분을 꽤 정확하게 예제 (int를 사용했다)에서 복사했습니다. 쿼리에서 int와 Strings를 사용하는 데 차이가 있습니까?

답변

11

값을 작은 따옴표로 묶어야합니다. 그렇지 않으면 열로 처리합니다.

KEY_RECORD_NAME + " = '" + name + "'" 

참고 : 네 SQLiteQueryBuilder

+0

조사, 또는

public Cursor getRecord(String name) throws SQLException { return mDb.query(true, DATABASE_TABLE_RECORDS, new String[] {KEY_ROWID, KEY_DATE, KEY_RECORD_NAME, KEY_TOTAL}, KEY_RECORD_NAME + " = ?", new String[] {name}, null, null, null, null); } 

그 가공 한 :이 솔루션은, 당신이 매개 변수 자리 표시자를 사용하고 selectionArgs 인수를 통해 값을 전달해야 SQL 인젝션에 열려 , 감사. 그게 문자열 이니까? 이전에 귀하의 링크에있는 자료를 살펴 봤는데 WHERE 절이 도움이되지 않습니다. WHERE 절에서 훨씬 적은 문자열 ... 적어도 내가 찾은 곳. – easycheese