首页 > 解决方案 > SQLite 表错误

问题描述

我正在使用 Android 中的 SQLite。我的表中只有 1 个对象,即名称。我想制作arraylist并在recyclerview中使用它。但我收到下面给出的错误。有了它,我知道光标有一些问题,但现在不是什么。

错误

Failed to read row 0, column -1 from a CursorWindow which has 7 rows, 1 columns.

代码到

public List<FavNames> getFav(){
    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

    String[] sqlMasterSelect = {"name"};
    String sqlMasterTable = "FavNames";

    qb.setTables(sqlMasterTable);
    Cursor c = qb.query(db,sqlMasterSelect,
            null,null,null,null,null);

    final List<FavNames> masterResult = new ArrayList<>();

    if (c.moveToFirst()){

        do {
            masterResult.add(new FavNames(c
                    .getString(c.getColumnIndex("name"))));

        }while (c.moveToNext());
    }

    return masterResult;

}

回收站视图

recyclerView = findViewById(R.id.favRecycler);
    recyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    fav = new Database(this).getFav();
    adapter = new FavAdapter(getBaseContext(), fav);
    recyclerView.setAdapter(adapter);

标签: javaandroidsqlite

解决方案


您必须确保列名是name
You don't need SQLiteQueryBuilder for such a simple query。

public List<FavNames> getFav(){
    SQLiteDatabase db = getReadableDatabase();

    String sqlMasterTable = "FavNames";
    String sql = "SELECT * FROM " + sqlMasterTable;

    Cursor c = db.rawQuery(sql, null);

    final List<FavNames> masterResult = new ArrayList<>();

    if (c.moveToFirst()){

        do {
            masterResult.add(new FavNames(c.getString(0).toString()));                    

        }while (c.moveToNext());
    }

    return masterResult;

}

这只是一个简单的 rawQuery
我希望我没有拼写错误。


推荐阅读