有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SQLite表错误

我正在Android中与SQLite合作。我的表中只有一个对象,即名称。我想制作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);

共 (1) 个答案

  1. # 1 楼答案

    您必须确保列名为name
    对于这样一个简单的查询,您不需要SQLiteQueryBuilder

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

    这只是一个简单的查询
    我希望我没有打字错误