首页 > 解决方案 > 插入列错误(SQLite Android Studio)

问题描述

我不断收到一个错误,它说我的数据库中没有创建任何列,我不知道为什么。下面的错误是我得到的。

错误:表 score 在“INSERT INTO scores(score,scoreName) VALUES (?,?)”中没有名为 score 的列 2021-03-29 19:04:44.590 23125-23125/com.example.assignment3

E/SQLiteDatabase: 插入 score=5 scoreName=Michelle 时出错

DatabaseHandler2.java

 public class DatabaseHandler2 extends SQLiteOpenHelper {
    public static final String DATABASE = "scoreDatabase";
    //tables
    public static final String TABLE_SCORES = "scores";
    //scores
    public static final String KEY_SID = "scoreID";
    public static final String KEY_SNAME = "scoreName";
    public static final String KEY_SCORE = "score";

    public DatabaseHandler2(Context context) {
        super(context, DATABASE, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db){
        //Creates Tables
        String CREATE_SCORES_TABLE = "CREATE TABLE " + TABLE_SCORES + " ("
                + KEY_SID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_SNAME + " TEXT, " + KEY_SCORE + " INT)";
        db.execSQL(CREATE_SCORES_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_SCORES);
        onCreate(db);
    }

    public void insertScore(String name, int score){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KEY_SNAME, name);
        values.put(KEY_SCORE, score);

        db.insert(TABLE_SCORES, null, values);
        db.close();
    }
    public Cursor allScores(){
        SQLiteDatabase db = this.getWritableDatabase();
        return db.rawQuery("SELECT * FROM " + TABLE_SCORES,null);
    }
}

Game.java - 使用 DatabaseHandler 的片段

 public class Game extends AppCompatActivity {
    private int numberCorrect;

        @Override
        public void onFinish() {
            answer0Btn.setEnabled(false);
            answer1Btn.setEnabled(false);
            answer2Btn.setEnabled(false);
            answer3Btn.setEnabled(false);
            bottomTxt.setText("Your score: " + numberCorrect + "/" + (game.getTotalQuestions() - 1));
            playBtn.setText("Play Again");
            playBtn.setVisibility(View.VISIBLE);
            DatabaseHandler2 db = new DatabaseHandler2(getApplicationContext());
            db.insertScore(getUsername(), numberCorrect);
        }
    }
}

分数.java

 public class Scores extends AppCompatActivity {
    TextView allScoresTxt;
    Game game = new Game();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scores);
        allScoresTxt = findViewById(R.id.allScoresTxt);

        DatabaseHandler2 db = new DatabaseHandler2(getApplicationContext());
        Cursor cursor = db.allScores();
        if (cursor.getCount() == 0) {
            allScoresTxt.setText("No Data");
        } else {
            while (cursor.moveToNext()) {
                allScoresTxt.setText("Name: " + cursor.getString(0) + "\t Score: " + cursor.getInt(1) + "\n");
            }
        }
    }
}

标签: androidsqlsqliteandroid-studiosql-insert

解决方案


推荐阅读