android - 如何按desc顺序从sqlite中检索数据并在textview中显示

标签 android sqlite android-sqlite

任何人都可以帮我尝试按降序检索数据并以相反的顺序在 textview 中显示它,因为最新的条目将首先显示?

这个查询在mysql中是正确的

客户是第一个表,历史表有客户的历史数据

应用程序工作正常,但不幸的是,当我尝试按降序获取数据时,它已关闭。

即使我只尝试了一个“成本”列仍然是应用程序,不幸的是它被关闭了。

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 放置 order by clause order 时,不幸的是应用程序关闭了。

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 对象被泄露!请修复您的应用程序以正确结束正在进行的事务并在不再需要时关闭数据库。

最佳答案

你遇到这个错误是因为你的表中可能没有数据所以你必须检查是否有任何数据?

试试这个。

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

关于android - 如何按desc顺序从sqlite中检索数据并在textview中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41620760/

相关文章:

java - Android海量数据库创建

android - 如何在 android api 8+ 中的溢出图标下显示菜单项

android - 时间选择器 : when to choose 24 or am/pm modes

ios - 在 iOS 6 中将 5112225.14 转换为 5,112,225.14

android - 从现有数据库创建一个新数据库(或者只是创建新表?)

Android:应用启动时仅将数据插入本地数据库一次

android - 如何在绝对布局中以编程方式移动按钮

java - 在哪里可以更好地全面、深入地理解Context参数的实例化?

javascript - 需要用JS检查SQlite中是否存在表

android - "Explicit termination method ' 关闭 ' not called"是什么意思?