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

问题描述 投票:0回答:2

我不知道我的代码有什么问题我遵循规则但结果错了。我想搜索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;

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

android sqlite
2个回答
0
投票

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

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

对此

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

0
投票

我相信您的问题是您正在尝试使用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行) 一行说明提取数据的行数是? (?将是要返回的数组中的元素数)
© www.soinside.com 2019 - 2024. All rights reserved.