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

Java 如何在应用程序首次运行时捕获SQLite错误,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,在主活动中,我试图检查应用程序何时打开,应用程序数据库是否存在。这是因为我只想在第一次运行时有机会创建数据库并插入所有需要的记录 但它对我不起作用,它给了我这个错误: …原因:安卓。数据库CursorindexOutOfBoundsException:请求索引0,大小为0 我的第一个想法是,上面的异常/错误不是SQLiteException,或者我不知道我到底缺少了什么 这是我的密码: DBAdapter dbCheck = new DBAdapter(this); boolea

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

但它对我不起作用,它给了我这个错误:

…原因:安卓。数据库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);
    } 
DBAdapter dbCheck=新的DBAdapter(此);
布尔状态;
字符串strData;
试试{
dbCheck.open();
Cursor tblCheck=dbCheck.getThis_tblData(10);//获取记录编号10-随机数
strData=tblCheck.getString(5);//获取表中字段的值
tblCheck.close();
dbCheck.close();
System.out.println(“Db发现”);
}catch(sqlitee){
//数据库尚不存在。请创建它。
System.out.println(“未找到数据库”);
Intent MakeDB=newintent(MainActivity.this、com.kjsoft.tre.InsertData.class);
星触觉(MakeDB);
} 

谢谢大家的帮助

这种特殊异常发生在泛型
游标
类中,因此它不是
SQLiteException

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

替换代码中的以下行:

Cursor tblCheck = dbCheck.getThis_tblData(10);
以下是:

Cursor tblCheck = dbCheck.getThis_tblData(10);
if ((tblCheck != null) && (tblCheck.getCount() > 0)) {
    tblCheck.moveToNext();
    strData = tblCheck.getString(5);
}
光标初始位置始终位于第一行之前,因此您必须将其移动到下一步(第一行),然后访问数据。
当然,您必须检查它是否不为null。

首先测试moveToFirst。您的光标看起来是空的。不知道为什么,因为您没有发布
获取的内容,所以此
可能是添加捕获所有异常捕获(异常e){…}并查看。您可以使用预填充的数据库。@Nambari我喜欢您的想法,我会在我的PC上尝试。谢谢您的解释,是的,我会尝试Nambari的想法。