2011-12-22 8 views
3

Android用SQLiteで大文字小文字に変換する方法について問題が発生しました。Android用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

返す必要があるレコードは1つだけなので、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; 
} 
関連する問題