我现在遇到如何在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 中的所有数据转换为小写类型。
答案 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;
}