Java 无法从数据库中获取数据

Java 无法从数据库中获取数据,java,android,sqlite,android-sqlite,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, nul

首先,我对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;
}
public ArrayList getWords(){
SQLiteDatabase db=this.getReadableDatabase();
String query=“SELECT*FROM”+表名称;
Cursor Cursor=db.rawQuery(查询,空);
ArrayList=新建ArrayList();
如果(光标!=null){
cursor.moveToFirst();
while(cursor.moveToNext()){
添加(新单词(cursor.getString(cursor.getPosition()));
}
}
cursor.close();
db.close();
退货清单;
}
光标的大小始终为1,但“List”变量的大小始终为0


我不明白这个问题,谢谢你的帮助。

你将光标位置移动了两次。只需删除行光标。moveToFirst()当在第一次迭代中移动到第一个位置时,moveToNext方法就足够了。

您可以使用以下代码:

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();
        }
}

我检查了所有东西,但你的建议不起作用。只是为了确保:我要获取所有行。

像这样尝试

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){
        while (cursor.moveToNext()){
            list.add(new Word(cursor.getString(cursor.getPosition())));
        }
    }
    cursor.close();
    db.close();
    return list;
}
public ArrayList getWords(){
SQLiteDatabase db=this.getReadableDatabase();
String query=“SELECT*FROM”+表名称;
Cursor Cursor=db.rawQuery(查询,空);
ArrayList=新建ArrayList();
如果(光标!=null){
while(cursor.moveToNext()){
添加(新单词(cursor.getString(cursor.getPosition()));
}
}
cursor.close();
db.close();
退货清单;
}

我刚刚意识到,在我上面给出的代码中,程序没有进入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)";

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

旧的

super(context, null, null, 1);
现在

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

谢谢你的帮助

也许您需要在查询的“;”末尾加上“+TABLE_NAME+”;”选项。如果需要所有行,请使用:Cursor Cursor=db.query(TABLE_NAME,null,null,null,null,null);欢迎来到堆栈溢出。如果这样格式化,代码的可读性更高。请参阅答案窗口右上角的“帮助”,了解如何格式化代码。我相信你在当前的答案中使用了粗体代码。谢谢@Gary99,我会查看帮助。