2011-12-22 2 views
3

안드로이드 용 SQLite에서 대문자를 소문자로 변환하는 방법에 대한 문제가 발생합니다.안드로이드 용 SQLite에서 소문자

public Cursor fetchFunctions(String searchword) throws SQLException { 
    Cursor mCursor = 
     mDb.query(true, FUNCTIONS_TABLE, new String[] { 
       FUNS_WORD, FUNS_BODY}, FUNS_WORD + "='" + searchword + "'", null, 
       null, null, null, null); 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor; 
} 

나는 LOWER (FUNS_WORD)처럼 + "= '"+ searchword + "'" 불행하게도, 점점 구문 오류를 Conver 유럽 싶다. 내가 원하는 건 FUNS_WORD에있는 데이터를 모두 유형으로 변환하고 싶습니다.

답변

4

당신은 당신은 = 대신에 LIKE 키워드를 사용할 수 있습니다 rawQuery

public Cursor fetchFunctions(String searchword) throws SQLException { 
    Cursor mCursor = 
     mDb.rawQuery("SELECT FUNS_WORD, FUNS_BODY FROM FUNCTIONS_TABLE WHERE LOWER(FUNS_WORD) = '" + searchword + "'", null); 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor; 
} 
+0

아마 정답 일 겁니다. 그건 그렇고, 코딩과 rawQuery는 어떻게 다른가요? – ppshein

1

을 사용해야합니다. LIKE 키워드는 대소 문자를 구별하며 귀하의 경우 % 기호없이 사용할 수 있습니다.

+0

한 레코드 만 반환해야하므로 LIKE를 사용할 필요가 없습니다. – ppshein

0

'" + searchword + "' 쿼리에 취약한 SQL 주입이 있습니다. 이로 인해 공격자가 데이터베이스를 손상시킬 수 있습니다.

커서는 try/finally 블록으로 싸여 있어야 완료시 항상 닫힙니다.

public Cursor fetchFunctions(String searchword) throws SQLException { 
    Cursor cursor = null; 
    try { 
     cursor = mDb.rawQuery("SELECT FUNS_WORD, FUNS_BODY FROM FUNCTIONS_TABLE WHERE LOWER(FUNS_WORD) = ?", new String[] { searchword }); 
     if (cursor != null) { 
      cursor.moveToFirst(); 
     } 
    } finally { 
     if (cursor != null) { 
     cursor.close(); 
     } 
    } 
    return cursor; 
}