нет такого столбца: _id (код 1): , при компиляции: ВЫБЕРИТЕ _id, имя, возраст, пол, зарплату, предмет У учителей

#android #sqlite

#Android #sqlite

Вопрос:

моя fetch(); функция

 public Cursor fetch() {
    String[] columns = new String[] { databaseHelper.teacher_ID,databaseHelper.teacher_Name,databaseHelper.Age,databaseHelper.Gender,databaseHelper.Salary,databaseHelper.subject};
    Cursor cursor = database.query(databaseHelper.Table_Name, columns, null, null, null, null, null);
    if (cursor != null) {
        cursor.moveToFirst();
    }
    return cursor;
}
  

мой основной, где я это называю

   final String [] from =new String[]{databaseHelper.teacher_ID,databaseHelper.teacher_Name,databaseHelper.Gender,databaseHelper.Age,databaseHelper.subject,databaseHelper.Salary
};

final int [] to =new int[]{R.id.id,R.id.name,R.id.age,R.id.gender,R.id.salary,R.id.subject};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    dbManger=new DBManger(this);
    dbManger.open();

    Cursor cursor= dbManger.fetch();
  

и вот моя таблица

 public final static String Table_Name="Teachers";

public static final String teacher_ID="_id";


public static final String teacher_Name="Name";


public static final String subject="subject";


public static final String Salary="salary";


public static final String Gender="gender";


public static final String Age="Age";
  

общедоступная конечная статическая строка DB_Name=»Школа»;

 public  static final int Version=1;


private static final String Create_table="create table "  Table_Name   "("   teacher_ID  " INTEGER PRIMARY KEY AUTOINCREMENT , "  teacher_Name  " TEXT NOT NULL, "  subject  " TEXT NOT NULL , " 
Salary  " INTEGER NOT NULL , " Gender " TEXT NOT NULL, "  Age  " INTEGER NOT NULL);";
  

Ответ №1:

Учитывая, что Create_table преобразуется в строку

 create table Teachers(
    _id INTEGER PRIMARY KEY AUTOINCREMENT, 
    Name TEXT NOT NULL, 
    subject TEXT NOT NULL, 
    salary INTEGER NOT NULL, 
    gender TEXT NOT NULL, 
    Age INTEGER NOT NULL
);
  

Который является допустимым рабочим SQL, тогда наиболее вероятная причина, по которой столбец не был найден, заключается в том, что приведенный выше SQL фактически не использовался.

Одна из наиболее распространенных (если не самая распространенная) причин связана с неправильным пониманием метода onCreate в Database Helper (класс, который является подклассом SQLiteOpenHelper).

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

Таким образом, если в структуру баз данных внесены изменения (например, добавлены новые столбцы), то это изменение не будет отражено, если база данных не будет удалена

  • Если метод onUpgrade следует типичному удалению таблиц, а затем вызывает метод onCreate, это также приведет к воссозданию таблиц.

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

  • Удалите / очистите данные приложения из настроек
  • Удалите приложение

а затем повторно запустить приложение.