You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio调用DatabaseHelper.addWord出现空指针异常如何解决

问题修复方案

1. 首要问题:DatabaseHelper实例未初始化导致空指针

报错明确指向DatabaseHelper.addWord被空对象调用,查看AddWords类代码,你仅声明了成员变量DatabaseHelper db;,没有对其进行实例化,直接调用方法就会触发空指针异常。
修复方式:在AddWords的onCreate方法中,控件初始化完成后添加实例化代码:

db = new DatabaseHelper(AddWords.this);

2. 次要问题:checkword方法逻辑错误

checkword方法存在两处问题,会导致单词重复校验完全失效:

  • 查询表错误:当前校验单词重复时查询的是教师用户表INSTRUCTORS_TABLE,实际应该查询单词表WORDS_TABLE
  • 查询条件语法错误:selection参数缺少=?匹配符,会直接触发SQL语法异常
    修复后的checkword方法代码:
public boolean checkword(String word){
    String[] columns = {INDEX_WORDS};
    SQLiteDatabase db = getReadableDatabase();
    String selection = WORD + "=?";
    String[] selectionArgs = {word};
    Cursor cursor = db.query(WORDS_TABLE, columns,selection,selectionArgs,null,null, null);
    int count = cursor.getCount();
    cursor.close();
    db.close();
    return count > 0;
}

3. 潜在问题:onUpgrade方法删表逻辑错误

SQLite不支持单条DROP TABLE语句同时删除多个表,当前写法会导致数据库升级时直接报错,需要拆分删表语句:
修复后的onUpgrade方法代码:

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + INSTRUCTORS_TABLE);
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + STUDENTS_TABLE);
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + WORDS_TABLE);
    onCreate(sqLiteDatabase);
}

内容的提问来源于stack exchange,提问作者sulaiman hayat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 14:06:02