我不知道我的代码有什么问题我遵循规则但结果错了。我想搜索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就足够了。
如果您学习了一些基本调试,它也会对您有所帮助,因为问题可能是您没有提取多行。
以下是另一种方法: -
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;
}