如何在第一次运行应用程序时捕获SQLite错误

时间:2012-10-01 15:21:47

标签: java android sqlite android-sqlite

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

但是它没有和我合作,它给了我这个错误:

..引起: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);
    } 

感谢大家的帮助!

2 个答案:

答案 0 :(得分:0)

此特殊例外情况发生在通用Cursor课程中,因此它不是SQLiteException

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

答案 1 :(得分: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);
}

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