为什么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只返回最后一行而不是所有行数据?的主要内容,如果未能解决你的问题,请参考以下文章