在Android应用程序中使用我的sqlite查询问题

时间:2013-03-20 14:24:56

标签: android sqlite

我的Android应用程序出了问题。我正在尝试使用多个表查询数据库并在应用程序中显示结果。这是一本字典。问题是我的查询不起作用。我不知道我做错了什么。 以下是我使用的代码示例。如果您需要更多信息,请告诉我们。 谢谢。

try {

        Cursor cursor = dictionary.getDictionaryDatabase().rawQuery("SELECT index_nom_adresse" + word[0].toLowerCase().trim() + " FROM adresse_definition JOIN   definition ON adresse_definition.definition = definition.data_id ", null);
        //Cursor cursor = dictionary.getDictionaryDatabase().query("adresse_definition", null, "index_nom_adresse= '" + word[0].toLowerCase().trim() + "' or definition= '" + word[0].toUpperCase().trim() + "' ", null, null, null, null);
        cursor.moveToFirst();
        if (cursor.getCount() != 0) {

            if (word[1] == null || word[1].equals("English")) {
                translatedWord = cursor.getString(2);
            } else {
                translatedWord = cursor.getString(1);
            }
        } else {
            translatedWord = "The word is not in database";
        }
        cursor.close();
    } catch (SQLiteException sqle) {
        translatedWord = "The word is not in database";
    }

这是我在尝试搜索单词时得到的logCat

03-20 14:34:17.341: I/SqliteDatabaseCpp(516): sqlite returned: error code = 1, msg = no such column: index_nom_adressebonbon, db=/data/data/com.example.application/databases/dict.db

2 个答案:

答案 0 :(得分:0)

查询应为:

           Cursor cursor = dictionary.getDictionaryDatabase().rawQuery("SELECT index_nom_adresse" + word[0].toLowerCase().trim() + " FROM adresse_definition JOIN   definition ON adresse_definition.definition = definition.data_id ", null);

否则未正确定义列。

答案 1 :(得分:0)

首先,你通过捕捉Exception然后说“这个词不在数据库中”来隐藏真正的错误。 由于您提供的信息量有限,您可能遇到的问题只是一个猜测,即在SELECT而不是WHERE子句中传递单词。

可能你的SQL查询需要是这样的:

SELECT index_nom_adresse
FROM adresse_definition 
JOIN definition ON adresse_definition.definition = definition.data_id
WHERE index_nom_adresse = word[0].toLowerCase().trim() OR definition = word[0].toUpperCase().trim()

这转换为:

String sql = "SELECT index_nom_adresse ";
sql += "FROM adresse_definition JOIN definition ON adresse_definition.definition = definition.data_id ";
sql += "WHERE index_nom_adresse = " + word[0].toLowerCase().trim() " OR definition=" + word[0].toUpperCase().trim();
Cursor cursor = dictionary.getDictionaryDatabase().rawQuery(sql, null);

或(一个更好的解决方案)(不知道你将如何进行加入,是否需要JOIN?)

Cursor cursor = dictionary.getDictionaryDatabase().query(
    "adresse_definition", 
    new String[] {"index_nom_adresse"}, 
    "index_nom_adresse= ? OR definition=?'", 
    new String[] {word[0].toLowerCase().trim(), word[0].toUpperCase().trim()}, 
    null, 
    null, 
    null);

请阅读Android和SQL:http://www.vogella.com/articles/AndroidSQLite/article.html

我这里没有工具来验证代码,如果有错误,请评论或编辑。