rawQuery()完全匹配

时间:2018-03-17 08:25:01

标签: android android-sqlite

我使用以下方法用LIKE语句查询我的SQLite数据库。

public List<Bean> getWords(String englishWord) {
        if(englishWord.equals(""))
            return new ArrayList<Bean>();
        String sql = "SELECT * FROM " + TABLE_NAME +
                " WHERE " + ENGLISH + " LIKE ? ORDER BY LENGTH(" + ENGLISH + ") LIMIT 100";

        SQLiteDatabase db = initializer.getReadableDatabase();

        Cursor cursor = null;
        try {
            cursor = db.rawQuery(sql, new String[]{"%" + englishWord.trim() + "%"});

            List<Bean> wordList = new ArrayList<Bean>();
            while(cursor.moveToNext()) {
                String english = cursor.getString(1);
                String mal = cursor.getString(2);
                wordList.add(new Bean(english, bangla));
            }

            return wordList;
        } catch (SQLiteException exception) {
            exception.printStackTrace();
            return null;
        } finally {
            if (cursor != null)
                cursor.close();
        }
    }

我想更改上面的代码,因为它会查询完全匹配。我尝试修改代码如下,但我不知道如何获取mal字符串。

public void getoneWords(String englishWord) {
        String sql = "SELECT * FROM " + TABLE_NAME +
                " WHERE " + ENGLISH + " =?";

        SQLiteDatabase db = initializer.getReadableDatabase();

        Cursor cursor = null;
        try {
            cursor = db.rawQuery(sql, new String[]{englishWord});

            while(cursor.moveToNext()) {
                String english = cursor.getString(1);
                String mal = cursor.getString(2);
            }
        } finally {
            if (cursor != null)
                cursor.close();
        }
    }

3 个答案:

答案 0 :(得分:0)

方法getoneWords为什么。您应该在此功能中返回malenglish

return new Bean(english, mal);

如果你需要第一个单词,只需要cursor.moveToFirst并删除while循环:

String english = cursor.getString(1);
String mal = cursor.getString(2);
return new Bean(english, mal);

答案 1 :(得分:0)

getoneWords()中,您没有返回查询的值。 由于您有两个返回值,您可能需要将它们包装在一对中,或者创建一个&#34; holder&#34;对象(例如class Words(String english, String mal))表示返回值。

如果您的Query返回多个匹配项,则需要返回这些对象的列表。否则,您的上述代码将返回最后一场比赛。

所以你需要改变你的函数来返回查询的

public Pair<String,String> getoneWords(String englishWord) {
    Pair<String,String> result = null;
    ...
    if(cursor.moveToNext()) {
         String english = cursor.getString(1);
         String mal = cursor.getString(2);
         result = new Pair<String,String>(english, mal);
    }
    ... 
    return result;

}

答案 2 :(得分:0)

我终于自己解决了这个问题。

public String getoneWords(String englishWord) {
        String sql = "SELECT * FROM " + TABLE_NAME +
                " WHERE " + ENGLISH + " =?";

        SQLiteDatabase db = initializer.getReadableDatabase();
        Cursor cursor = null;
        String meaning = "";
        try {
            cursor = db.rawQuery(sql, new String[] {englishWord});
            if(cursor.getCount() > 0) {
                cursor.moveToFirst();
                meaning = cursor.getString(2);
            }
            return meaning;
        }finally {
            cursor.close();
        }
    }