2011-12-22 46 views
3

我现在正在解决如何在SQLite for Android中将大写字母转换为小写字母的问题。SQLite中的小写for Android

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; 
} 

我想CONVER像LOWER(FUNS_WORD)+ “= '” +搜索内容+ “'”不幸的是,越来越语法错误。我想要的是我想将FUNS_WORD中的所有数据转换为小写字母类型。

回答

4

你将不得不使用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 2011-12-22 15:07:51

1

您可以使用like关键字到位=的。 LIKE关键字不区分大小写,可用于没有%符号的情况。

+0

我不需要使用LIKE,因为只需要返回一条记录。 – ppshein 2011-12-22 15:05:54

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; 
}