任何人都可以帮我尝试以desc顺序检索数据并按逆序显示在textview中,因为最新的条目会先显示出来吗?
此查询在mysql中是正确的
客户是第一个表,历史表有客户历史数据
应用程序工作正常,但当我尝试以desc顺序获取数据时,很遗憾它已关闭。
甚至我只尝试了一次"成本"列仍然是应用程序不幸关闭。public StringBuilder getData(String custname)
{
String query="select h.lsd , h.work,h.cost from "+c_tablename+" c, "+h_tablename+" h where name='"+custname+"' and c.bike_number=h.bike_number ORDER BY lsd DESC";
SQLiteDatabase sqLiteDatabase=this.getReadableDatabase();
Cursor cursor=sqLiteDatabase.rawQuery(query,null,lsd+"DESC");
StringBuilder stringBuilder =new StringBuilder();
cursor.moveToFirst();
if ( cursor !=null )// cursor!=null error -- android.database.CursorIndexOutOfBoundsException: Index 0 requested,
{
do {
//cursor.moveToFirst();
String lsd=cursor.getString(cursor.getColumnIndex("lsd"));
stringBuilder.append("Date:"+lsd+"\n");
String lwd=cursor.getString(cursor.getColumnIndex("work"));
stringBuilder.append("Work:"+lwd+"\n");
String cost=cursor.getString(cursor.getColumnIndex("cost"));
stringBuilder.append("Cost:"+cost");
}while (cursor.moveToNext());
cursor.close();
}
return stringBuilder;
}
在上面的代码中,查询执行正确,直到
字符串查询="从" + c_tablename +"中选择h.lsd,h.work,h.cost; c," + h_tablename +" h其中name ='" + custname +"'和c.bike_number = h.bike_number&#34 ;;
并将数据显示为第1个条目第1个和最后一个条目
但是当我通过lsd desc按顺序排序时,应用程序很快就会关闭。
String query="select h.lsd , h.work,h.cost from "+c_tablename+" c, "+h_tablename+" h where name='"+custname+"' and c.bike_number=h.bike_number ORDER BY lsd DESC";
01-12 23:57:16.599 4046-4059 /? W / SQLiteConnectionPool:数据库' +数据+用户+ 0 + com_google_android_gms +数据库+ metrics_db'的SQLiteConnection对象。被泄露了!请修复您的应用程序以正确结束正在进行的事务,并在不再需要时关闭数据库。
答案 0 :(得分:1)
您遇到此错误,因为您的表格中可能没有数据,因此您必须检查是否有任何数据?
试试吧。
if ( cursor !=null && cursor.getCount()>0){
//do your stuff
}
您必须指定特定列,因为两个表中可能都有lsd
列,因此在编写查询时具体如此
试试这个
String query="select h.lsd , h.work,h.cost from "+c_tablename+" c, "+h_tablename+" h where name='"+custname+"' and c.bike_number=h.bike_number ORDER BY h.lsd DESC";