Ошибка столбца SQLite: в таблице XXXX нет столбца с именем ZZZZ - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь вставить строки в мою таблицу учеников, которая содержит две строки: ID и имя

Вот функция addHandler, которая реализована в классе MyDBHandler:

 public void addHandler(Student student) {
    ContentValues values = new ContentValues();
    values.put(COLUMN_ID, student.getID());
    values.put(COLUMN_NAME, student.getStudentName());
    SQLiteDatabase db = this.getWritableDatabase();
    db.insert(TABLE_NAME, null, values);
    db.close();
}

onCreate метод: -

public void onCreate(SQLiteDatabase db) { 
    String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + COLUMN_ID + " INTEGER PRIMARY KEY ," + COLUMN_NAME + " TEXT )"; 
    db.execSQL(CREATE_TABLE); 
}

Атрибуты класса MyDBHandler, который расширяет SQLiteOpenHelper:

 private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "studentDB.db";
public static final String TABLE_NAME = "Student";
public static final String COLUMN_ID = "StudentID";
public static final String COLUMN_NAME = "StudentName";

У меня есть кнопка ADD в моем файле activity_main.xml иВот код:

public void add(View view){
    MyDBHandler dbHandler = new MyDBHandler(this, null, null, 1);
    int id = Integer.parseInt(studentIdText.getText().toString());
    String name = studentNameText.getText().toString();
    Student student = new Student(id, name);
    dbHandler.addHandler(student);
    studentIdText.setText("");
    studentNameText.setText("");
}

Приложение работает отлично, но когда я хочу вставить строку в таблицу, я получаю следующие ошибки в Таблице запуска:

E/SQLiteLog: (1) table Student has no column named StudentID
E/SQLiteDatabase: Error inserting StudentName=yassine StudentID=10

android.database.sqlite.SQLiteException: table Student has no column named StudentID (code 1): , while compiling: INSERT INTO Student(StudentName,StudentID) VALUES (?,?)
#################################################################
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
    (table Student has no column named StudentID (code 1): , while compiling: INSERT INTO Student(StudentName,StudentID) VALUES (?,?))
#################################################################
    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1093)
    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:670)
    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
    at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
    at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1607)
    at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1479)
    at com.example.test.MyDBHandler.addHandler(MyDBHandler.java:48)
    at com.example.test.MainActivity.add(MainActivity.java:40)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
    at android.view.View.performClick(View.java:5246)
    at android.widget.TextView.performClick(TextView.java:10566)
    at android.view.View$PerformClick.run(View.java:21256)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:145)
    at android.app.ActivityThread.main(ActivityThread.java:6917)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

Любые рекомендации?

1 Ответ

0 голосов
/ 03 марта 2019

Скорее всего, ваша проблема неверна в отношении метода onCreate .То есть onCreate не запускается при каждом запуске приложения. onCreate будет работать, только если база данных на самом деле не существует.Если база данных уже была создана другим предыдущим запуском приложения, метод onCreate не запускается.

Таким образом, любые изменения, внесенные в структуру базы данных, как это обычно применяется вметод onCreate не будет применяться.

Возможно, вы добавили определение для столбца StudentId в код в onCreate метод, после запуска приложения.

Пока у вас нет данных, которые необходимо сохранить (что весьма вероятно), самое простое решение - выполнить 1 из следующих действий: -

  • удалить или очистить данные приложения (через настройки / приложения)
  • удалить приложение

, а затем повторно запустить приложение, база данных будет создана с помощьюкод в соответствии с измененным кодом onCreate .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...