从SQLITE数据库表中提取整数时的数字格式异常

时间:2017-05-14 22:28:12

标签: java android-sqlite

我看过类似的问题,但我遇到了同样的问题。 我的应用程序一直在崩溃addQuestion()方法,并在我的生活中,我无法指出问题。错误日志显示第176行int difficulty = Integer.parseInt(cursor.getString(2));处的数字格式异常 我仔细检查了我的代码以查找可能的SQL语法错误但找不到任何内容。 这是我的addQuestion方法

public void addQuestion(Question question, String question_type){

   SQLiteDatabase db = getWritableDatabase();

    String query = "SELECT body FROM questions where body = '" +question.getBody()+"'";
    Cursor cr = db.rawQuery(query, null);

    if(cr.getCount() > 0){
        db.close();
        return;
    }
    else {
        ContentValues cv = new ContentValues();
        cv.put(type, question_type);
        cv.put(body, question.getBody());
        cv.put(answer, question.getAnswer());
        cv.put(difficulty, question.getDifficulty());

        try {
            db.insert(questions_table, null, cv);
        } catch (SQLiteException e) {
            e.getMessage();
        }
    }
    db.close();
}

这是我的getQuestion类型方法:

public Question getQuestionByType(String type){
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT " + body + "," + answer + "," + difficulty + " FROM " + questions_table + " WHERE "
          +  this.type + " ='" + type+"';";

    Cursor cursor = db.rawQuery(query, null);
    cursor.moveToFirst();
    String body = cursor.getString(0);
    String answer = cursor.getString(1);
    int difficulty = Integer.parseInt(cursor.getString(2));
    db.close();

    return new Question(type, body, answer, difficulty);
}

这是日志输出

   java.lang.NumberFormatException: null
                                                                  at java.lang.Integer.parseInt(Integer.java:483)
                                                                  at java.lang.Integer.parseInt(Integer.java:556)
                                                                  at com.maz.quizzdat.DbHandler.getQuestionByType(DbHandler.java:176)
                                                                  at com.maz.quizzdat.MainActivity$1.onClick(MainActivity.java:47)

感谢任何帮助。

编辑: 对于那些可能遇到类似情况的人,你不能在字符串的这种特殊情况下使用Integer.parseInt();,即使该字符串实际上是一个数字。使用curser.getInt()代替Integer.parseInt(curser.getString())

2 个答案:

答案 0 :(得分:2)

尝试使用cursor.getInt(2)代替getString(2),因为该列包含整数?

https://developer.android.com/reference/android/database/Cursor.html#getInt(int)

编辑:parseInt()显然不再需要了。

答案 1 :(得分:0)

您应该在cursor.moveToFirst()方法getQuestionByType之前使用cursor.getInt(0)以确保查询有结果,然后您可以使用select.onchange = updateSubTema;