0

在主要活动中,我试图检查应用程序何时打开,如果应用程序数据库存在或不存在。这是因为我想有机会创建数据库并仅在第一次运行时插入所有需要的记录。

但它不适用于我,它给了我这个错误:

..引起:android。数据库。CursorindexOutOfBoundsException: 请求索引 0,大小为 0

我的第一个想法是上面的异常/错误不是 SQLiteException 或者我不知道我到底错过了什么。

这是我的代码:

    DBAdapter dbCheck = new DBAdapter(this);
    boolean dbStatus;
    String strData;
    try { 
        dbCheck.open(); 
        Cursor tblCheck = dbCheck.getThis_tblData(10); //get record no 10 - random number
        strData = tblCheck.getString(5);   // get the value of a field in the table
        tblCheck.close();
        dbCheck.close();
        System.out.println("<---> Db found ");
    } catch (SQLiteException e) { 
        //database doesn't exist yet. Create it.
        System.out.println("<---> Db not found ");
    Intent MakeDB = new Intent(MainActivity.this, com.kjsoft.tre.InsertData.class);
    StartActivity(MakeDB);
    } 

感谢大家的帮助!

4

2 回答 2

0

这个特殊的异常发生在泛型Cursor类中,所以它不是SQLiteException.

您可以更改catch语句中的类型,就像 Nambari 所说的那样,但是创建一个 SQLiteOpenHelper 类 来管理数据库的创建(以及更新,如果您的应用程序发生更改)是一个更好的主意。

于 2012-10-01T15:32:11.573 回答
0

替换代码中的以下行:

Cursor tblCheck = dbCheck.getThis_tblData(10);

具有以下内容:

Cursor tblCheck = dbCheck.getThis_tblData(10);
if ((tblCheck != null) && (tblCheck.getCount() > 0)) {
    tblCheck.moveToNext();
    strData = tblCheck.getString(5);
}

光标初始位置始终在第一行之前,因此您必须将其移动到下一步(第一行),然后访问您的数据。当然,您必须检查它是否不为空。

于 2012-10-02T10:20:41.713 回答