如果 SQLite 游标没有结果,应用程序崩溃

Posted

技术标签:

【中文标题】如果 SQLite 游标没有结果,应用程序崩溃【英文标题】:App crashes if SQLite cursor has no results 【发布时间】:2016-08-10 05:13:16 【问题描述】:

我有一个使用游标运行 SQlite 查询的应用程序。

    public Cursor totaltrips()
    Cursor cursor = database.rawQuery("SELECT * AS TTotal FROM " + DatabaseHelper.TABLE_NAME, null);
    return cursor;

结果存储到一个最多包含 5 个值的 Arraylist 中。如果数据库中没有记录,则应用程序崩溃。如果我有一个或多个数据库条目,它工作正常。有谁知道当没有数据库条目时如何阻止它崩溃?

 // get column value
    if (Distance.moveToNext())
        result = String.valueOf(Distance.getDouble(Distance.getColumnIndex("myTotal")));

    tnmView.setText(result);

    List<String> distancearray = new ArrayList<String>();
    Cursor cursor =  dbManager.totaldistance();


    do
        distancearray.add(cursor.getString(1));
    while ((cursor.moveToNext()));
    ttrips = cursor.getCount();
    Log.i("Graph", "TTRIPS = " + ttrips);

    // Be sure here to have at least the 5 desired elements into the list
    while(distancearray.size() < 5)
        distancearray.add("0");
    

应用程序因错误而崩溃

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

上线

do
        distancearray.add(cursor.getString(1));
    while ((cursor.moveToNext()));

【问题讨论】:

在此之前你可以检查 cursor.getCount() > 0 ... 只需将您的 do while 循环添加到 if/else 语句 if(curser.getCount()&gt;0) //do-while loop here 在循环之前检查 cursor.getCount() > 0 【参考方案1】:

检查光标是否真的有结果,例如尝试这样的事情:

int numResults = cursor.getCount();
if (numResults > 0) 
    do 
        distancearray.add(cursor.getString(1));
     while ((cursor.moveToNext()));

【讨论】:

这应该是答案【参考方案2】:

替换

do
    distancearray.add(cursor.getString(1));
while ((cursor.moveToNext()));

if (cursor != null) 
    while (cursor.moveToNext()) 
        distancearray.add(cursor.getString(1));
    
    cursor.close();

【讨论】:

【参考方案3】:

检查游标是否为空且具有多个值。使用后关闭游标。

if(cursor!=null&&cursor.getCount()>0)
cursor.moveToFirst();
while(cursor.hasNext())

//do stuff here


cursor.close();

【讨论】:

这将跳过第一行。

以上是关于如果 SQLite 游标没有结果,应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

从 Sqlite 游标创建 Pojo 类花费了太多时间

如果列结果为空,C++ SQLite 停止错误

Kivy Android Sqlite3使应用程序崩溃时出现“没有这样的模块”错误

SQLite 查询错误,onItemClick 导致应用崩溃

在 Android 中写入 SQLite 数据库时应用程序崩溃 [重复]

如何从android中的sqlite中检索数据