在android中打开SQLite数据库时出现非法状态异常

时间:2013-05-04 00:25:52

标签: android sqlite android-sqlite illegalstateexception

所以,我有一个名为DatabaseHandler的类,它继承了SQLiteOpenHelper。该类负责管理将信息从在线数据库复制到手机的数据库。现在,问题在于,当我调用它的getQuestionsCount()方法时,正如名称sugest,计算项目数量,它会崩溃。它在调用其getReadableDatabase()方法的行上崩溃。它告诉我它有一个IllegalStateException。发生了什么事?

崩溃活动的代码。检查是否已存储用于使用的问题:

DatabaseHandler db = new DatabaseHandler(getApplicationContext());

if(db.getQuestionsCount() == 0)
    if(!isNetworkAvailable() || !canConnectToServer())
        return -2;
else
    if(!isNetworkAvailable() || !canConnectToServer())
        return -3;

我的DatabaseHandler类的一部分:

public class DatabaseHandler extends SQLiteOpenHelper
{
...
    public DatabaseHandler(Context context)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    ...

    @Override
    public void onCreate(SQLiteDatabase db)
    {
        String CREATE_QUESTIONS_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_QUESTIONS + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_QUESTION + " TEXT NOT NULL,"
            + KEY_CATEGORY + " INTEGER NOT NULL," + KEY_ANSWER_1 + " TEXT NOT NULL,"
            + KEY_ANSWER_2 + " TEXT NOT NULL," + KEY_ANSWER_3 + " TEXT NOT NULL,"
            + KEY_ANSWER_4 + " TEXT NOT NULL," + KEY_DATE_POSTED + " TEXT NOT NULL)";
        db.execSQL(CREATE_QUESTIONS_TABLE);

        db.close();
    }
    ...

    public int getQuestionsCount()
    {
        String countQuery = "SELECT  * FROM " + TABLE_QUESTIONS;
        SQLiteDatabase db = this.getReadableDatabase(); //<-- ERROR ON THIS LINE
        Cursor cursor = db.rawQuery(countQuery, null);
        int count = cursor.getCount();
        cursor.close();

        // return count
        return count;
    }
}

1 个答案:

答案 0 :(得分:1)

删除onCreate()

中的db.close
@Override
public void onCreate(SQLiteDatabase db)
{
    String CREATE_QUESTIONS_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_QUESTIONS + "("
        + KEY_ID + " INTEGER PRIMARY KEY," + KEY_QUESTION + " TEXT NOT NULL,"
        + KEY_CATEGORY + " INTEGER NOT NULL," + KEY_ANSWER_1 + " TEXT NOT NULL,"
        + KEY_ANSWER_2 + " TEXT NOT NULL," + KEY_ANSWER_3 + " TEXT NOT NULL,"
        + KEY_ANSWER_4 + " TEXT NOT NULL," + KEY_DATE_POSTED + " TEXT NOT NULL)";
    db.execSQL(CREATE_QUESTIONS_TABLE);
}

光标在返回之前关闭

public int getQuestionsCount()
{
    String countQuery = "SELECT  * FROM " + TABLE_QUESTIONS;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int count = cursor.getCount();
    cursor.close();

    return count;
}