适用于Android的SQLite小写

时间:2011-12-22 11:31:56

标签: android sqlite

我现在遇到如何在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;
}

我想转发 LOWER(FUNS_WORD)+“='”+ searchword +“'”,遗憾的是,语法错误。我想要的是我想将 FUNS_WORD 中的所有数据转换为小写类型。

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

您可以使用LIKE关键字代替=。 LIKE关键字不区分大小写,可以在没有%符号的情况下使用。

答案 2 :(得分: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;
}