为什么Sqlite只返回最后一行而不是所有行数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Sqlite只返回最后一行而不是所有行数据?相关的知识,希望对你有一定的参考价值。

我不知道我的代码有什么问题我遵循规则但结果错了。我想搜索db并查找所有行数据,但我只从sqlite获取最后一行。我搜索数据库的代码如下:

public ArrayList<ArrayList<ContractSaveDataFromDB>> ActiveContractData(String phone, String numberId)
{
    ArrayList<ContractSaveDataFromDB> UserData = new ArrayList<ContractSaveDataFromDB>();

    ArrayList<ArrayList<ContractSaveDataFromDB>> SendUserData =
            new ArrayList<ArrayList<ContractSaveDataFromDB>>();

    SQLiteDatabase db = this.getReadableDatabase();

    String whereClause = "phone = ? AND numberId = ?";
    String[] whereArgs = new String[]{
            phone,
            numberId
    };

    String orderBy = "activeContract";
    Cursor res2=db.query("usersAccount",null,whereClause,whereArgs,null,null,orderBy);

    res2.moveToFirst();

       do{
           UserData.clear();
           int index;

           ContractSaveDataFromDB contractSaveDataFromDB=new ContractSaveDataFromDB();

               index = res2.getColumnIndex("buyAmount");
               String buyAmount = res2.getString(index);
               contractSaveDataFromDB.setBuyAmount(buyAmount);

               UserData.add(contractSaveDataFromDB);
               SendUserData.add(UserData);

         } while(res2.moveToNext());

    res2.close();
    db.close();

    return SendUserData;

我不知道出了什么问题。如果你帮助我解决我的问题,我感谢你。

答案

你已经添加了where子句,所以它可能会过滤你的结果尝试通过更改它来删除它

Cursor res2=db.query("usersAccount",null,whereClause,whereArgs,null,null,orderBy);

对此

Cursor res2=db.query("usersAccount",null,null,null,null,null,orderBy);
另一答案

我相信您的问题是您正在尝试使用ContractSaveDataFromDB对象的ArrayList的ArrayList。

我相信ContractSaveDataFromDB对象的ArrayList就足够了。

如果您学习了一些基本调试,它也会对您有所帮助,因为问题可能是您没有提取多行。

以下是另一种方法: -

  • 使用ContractSaveDataFromDB对象的ArrayList,
  • 通过向日志中写入一些可能有用的信息来介绍一些调试
  • 并且更健全,因为如果没有提取行,它不会崩溃 即如果您使用moveToFirst并且不检查结果(false表示无法完成移动)那么您将收到错误,因为您正在尝试读取第-1行(在第一行之前),因为游标中不存在任何行。

:-

public ArrayList<ContractSaveDataFromDB> ActiveContractData(String phone, String numberId) {
    ArrayList<ContractSaveDataFromDB> SendUserData = new ArrayList<ContractSaveDataFromDB>();
    SQLiteDatabase db = this.getReadableDatabase();
    String whereClause = "phone = ? AND numberId = ?";
    String[] whereArgs = new String[]{
            phone,
            numberId
    };

    String orderBy = "activeContract";
    Cursor res2 = db.query("usersAccount", null, whereClause, whereArgs, null, null, orderBy);
    Log.d("RES2 COUNT", "Number of rows in Res2 Cursor is " + String.valueOf(res2.getCount()));

    while (res2.moveToNext()) {
        ContractSaveDataFromDB current_user_data = new ContractSaveDataFromDB();
        current_user_data.setBuyAmount(res2.getString(res2.getColumnIndex("buyAmount")));
        Log.d("NEWROW", "Adding data from row " + String.valueOf(res2.getPosition()));
        SendUserData.add(current_user_data);
    }
    res2.close();
    db.close();
    Log.d("EXTRACTED", "The number of rows from which data was extracted was " + String.valueOf(SendUserData.size()));
    return SendUserData;
}
  • 如果在运行后检查您应该看到的日志: - 一行详细说明从表中提取的行数 每行的一行(如果有任何提取)说从行添加数据? (哪里?第0行是第0行) 一行说明提取数据的行数是? (?将是要返回的数组中的元素数)

以上是关于为什么Sqlite只返回最后一行而不是所有行数据?的主要内容,如果未能解决你的问题,请参考以下文章

jquery 数据表返回倒数第二行而不是最后一行

如何通过索引(而不是 id)在 SQLite 中获取一行

从 ListView(SQLite 数据库)中长按行删除

当我选择最后一行时,为什么在MSFlexGrid中选择所有行?

带有 sqlite 的核心数据仅返回 3 行

如何在 SQLite 中获取最后插入的行 guid?