【问题标题】:How to retrieve data from sqlite in desc order and disply in text view如何以 desc 顺序从 sqlite 检索数据并在 textview 中显示
【发布时间】:2017-01-17 03:55:43
【问题描述】:

谁能帮我尝试按 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;
}  

在上面的代码中,查询执行正确,直到

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";

并将数据显示为第一个条目第一个和最后一个条目

但是当我通过 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:数据库 '+data+user+0+com_google_android_gms+databases+metrics_db' 的 SQLiteConnection 对象被泄露!请修复您的应用程序以正确结束正在进行的事务并在不再需要时关闭数据库。

【问题讨论】:

  • '应用程序不幸关闭'是崩溃,请提供来自 logcat 的堆栈跟踪

标签: android sqlite android-sqlite


【解决方案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";

【讨论】:

  • 另一种方法是使用while (cursor.moveToNext()) { ..yourstuff.. }。如果没有行,则永远不会进入循环。
猜你喜欢
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 2018-02-26
  • 2020-09-18
  • 2017-12-20
  • 2017-06-02
相关资源
最近更新 更多