database - Android:从数据库问题中检索数据

标签 database android sqlite

我创建了以下方法来从数据库中检索存储的设置:

public String getEntry(long rowIndex){
    String value = "";

    Cursor c = db.query(DATABASE_TABLE, new String[] {KEY_NAME, VALUE}, KEY_NAME + "=" + rowIndex, null, null, null, null);
    int columnIndex = c.getColumnIndex(VALUE);
    int rowsCount = c.getCount();
    if(rowsCount > 0){
        String value = c.getString(columnIndex);
    }

    return value;
}

在调试时,我可以看到游标 c 包含两列和一行,但是当涉及到行时

String value = c.getString(columnIndex);

它会抛出 CursorIndexOutOfBoundsException,尽管 columnIndex = 1 应该指向一个有效条目。

有谁知道这里可能出了什么问题吗?

最佳答案

我不知道你用的DB-Wrapper,但我想做两个猜测,因为我对Sqlite有点了解。

它可能是:

  1. 在我的包装器和 C-API 中,每次您想要检索数据时都需要执行一个步骤(或下一步)。您的异常表明您没有位于正确的行。因此,您可以尝试“下一步”或“步骤”(您的 DB-Wrapper 所能理解的)。

  2. c.getCount() 也可能带来麻烦。 getCount 可以做什么,依靠游标?它可以迭代游标直到完成。发生这种情况时,光标已用完,您只能重做整个事情。在这一点上阅读会抛出你得到的东西。为了避免出现问题而不需要读取表格两次,您应该自己读取所有行并自己进行计数。在您的 DB-Wrapper 中应该有一些方法(例如抛出的异常或状态),您可以在其中检查您的光标是否已用完。

当我正确理解您的 DB-Wrapper 时,其中一个可能是问题所在。

关于database - Android:从数据库问题中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1108170/

相关文章:

c# - 在 .isPasswordExpired 和服务器线程、版本上使用 c# 连接 mysql 时出现空引用异常

Android OpenGL图像处理——不带SurfaceView

java - SoundPool 文件队列

sql - 仅在满足特定条件时才加入表

java - 从网站下载多个图像并将它们保存在sqlite中

database - 在 Postgres 中存储矢量数据的有效方法是什么?

c# - 如何使用 C# 从 postgresql 数据库中检索双数组?

SQL 2008 Express (R2) : Creating an UPDATE trigger to update a table on another server?

android - 如何捕捉默认短信应用程序切换事件?

android - sqlite查询运行时错误