无法从数据库中获取数据

时间:2017-06-11 21:08:42

标签: java android sqlite android-sqlite

首先,我是Android开发的新手。 我在从数据库中获取数据时遇到了一些问题。每当我尝试获取数据时,光标都是空的。

这是我的代码:

public ArrayList<Word> getWords(){

    SQLiteDatabase db = this.getReadableDatabase();
    String query = "SELECT * FROM " + TABLE_NAME;
    Cursor cursor = db.rawQuery(query, null);
    ArrayList<Word> List = new ArrayList<Word>();

    if(cursor != null){
            cursor.moveToFirst();
            while (cursor.moveToNext()){
            List.add(new Word(cursor.getString(cursor.getPosition())));
        }
    }
    cursor.close();
    db.close();
    return List;
}

光标的大小始终为1,但是&#34; List&#34;的大小。变量始终为0.

我没有理解这个问题,谢谢你的帮助。

6 个答案:

答案 0 :(得分:1)

您正在移动光标位置两次。只需删除行 cursor.moveToFirst(); moveToNext 方法就足够了,因为它移动到第一次迭代的第一个位置。

答案 1 :(得分:0)

您可以使用此代码:

1 - 如果你需要第一行:

if(cursor != null){
        cursor.moveToFirst();
        if(cursor.isAfterLast() == false){
        List.add(new Word(cursor.getString(cursor.getPosition())));
        }
}

2-如果您需要多行:

if(cursor != null){
        cursor.moveToFirst();            
        while (cursor.isAfterLast() == false) {
        List.add(new Word(cursor.getString(cursor.getPosition())));
        cursor.moveToNext();
        }
}

答案 2 :(得分:0)

我检查了一切,但你的建议没有奏效。只是为了确定:我想要获取所有行。

答案 3 :(得分:0)

试试这个

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

答案 4 :(得分:0)

我刚刚意识到程序没有进入上面给出的代码中的while循环。我认为数据库存在问题。

我使用该查询创建数据库:

private static final String SQL_CREATE_ENTRIES =
            "CREATE TABLE " + TABLE_NAME + " (" +
                    COLUMN_NAME_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    COLUMN_NAME_TURKISH + " TEXT, " +
                    COLUMN_NAME_ENGLISH + " TEXT, " +
                    COLUMN_NAME_GERMAN + " TEXT, " +
                    COLUMN_NAME_FRENCH + " TEXT, " +
                    COLUMN_NAME_ARABIC + " TEXT, " +
                    COLUMN_NAME_RUSSIAN + " TEXT, " +
                    COLUMN_NAME_SPANISH + " TEXT, " +
                    COLUMN_NAME_ITALIAN + " TEXT)";

答案 5 :(得分:0)

我觉得自己像个白痴,因为我忘了在构造函数方法中输入数据库名称,如:

<强>旧

super(context, null, null, 1);

立即

super(context, "database", null, 1);

感谢您的帮助!