Причиной этого исключения является то, что у вас есть что-то отличное от ?? INTEGER PRIMARY KEY AUTOINCREMENT
для столбца при создании таблицы.
Более конкретно, у вас есть: -
create table Lehrer_table(ID_LINTEGER PRIMARY KEY AUTOINCREMENT,LEHRERNAMETEXT,LEHRERKUERZELTEXT,LEHRERRAUMTEXT,LEHRERMAILTEXT)
Это должно быть вероятнобыть: -
create table Lehrer_table(ID_L INTEGER PRIMARY KEY AUTOINCREMENT,LEHRERNAMETEXT,LEHRERKUERZELTEXT,LEHRERRAUMTEXT,LEHRERMAILTEXT)
т.е. был добавлен пробел между ID_L
и INTEGER
, поэтому ID_LINTEGER
становится ID_L INTEGER
.
Сказать, что вы используете AUTOINCREMENT
, скорее всего, не нужно и вредно, поскольку оно потребляет больше ресурсов.
Все, что делает AUTOINCREMENT
, - это гарантирует, чтоnext id будет больше, чем предыдущее (скорее всего, оно будет в любом случае, пока вы не достигнете 9223372036854775807 строк).Если это число будет достигнуто с AUTOINCREMENT
, вы не сможете вставить строки, так как вставка будет иметь исключение SQLITE_FULL .Хотя есть вероятность, что без AUTOINCREMENT
будет назначен теперь неиспользуемый идентификатор.
Чтобы процитировать документацию SQLIte: -
AUTOINCREMENTКлючевое слово накладывает дополнительные ресурсы ЦП, памяти, дискового пространства и дискового ввода-вывода, и их следует избегать, если в этом нет особой необходимости.Обычно это не требуется.
В SQLite столбец с типом INTEGER PRIMARY KEY является псевдонимом для ROWID (кроме таблиц WITHOUT ROWID), который всегда представляет собой 64-разрядное целое число со знаком.
В INSERT, если столбцу ROWID или INTEGER PRIMARY KEY явно не дано значение, он будет автоматически заполнен неиспользуемым целым числом, обычно на единицу больше, чем наибольший ROWIDВ настоящее время используется.Это верно независимо от того, используется или нет ключевое слово AUTOINCREMENT.
Если ключевое слово AUTOINCREMENT появляется после INTEGER PRIMARY KEY, это изменяет алгоритм автоматического назначения ROWID, чтобы предотвратить повторное использование ROWIDs болеевремя жизни базы данных.Другими словами, целью AUTOINCREMENT является предотвращение повторного использования ROWID из ранее удаленных строк.
Поэтому я бы предложил использовать: -
create table Lehrer_table(ID_L INTEGER PRIMARY KEY,LEHRERNAMETEXT,LEHRERKUERZELTEXT,LEHRERRAUMTEXT,LEHRERMAILTEXT)