EDIT
Мой первоначальный ответ неверен, заявляя, что метод onCreate
вызывается каждый раз, когда SQLiteOpenHelper
(dbhelper
в данном случае) создается. Согласно documentation, он вызывается только при создании базы данных (спасибо @KumarBibek, что привлекло мое внимание). Это также означает, что мой ответ в значительной степени бесполезен, по крайней мере, по указанной проблеме. Я все еще предпочитаю держать его в живых, отчасти как позорное напоминание о моей поспешной ошибке :-), но также, поскольку он (по мне) имеет некоторые другие полезные примечания для любых будущих читателей.
ПРОИСХОЖДЕНИЕ
Независимо от вашего текущего вопроса, я думаю, вы встретите другие проблемы, если вы пытаетесь создать таблицу в методе onCreate
. Если вы каким-либо образом не удалите свою таблицу (в соответствующем onDestroy
или что-то в этом роде), вы попытаетесь выполнить запрос CREATE TABLE...
в таблице, которая уже существует для каждого раза, когда платформа dbhelper
«создается» платформой. Ваша текущая проблема может быть даже из-за этого (даже если я нахожу ее немного маловероятной из-за заявленного сообщения об ошибке).
Существует onUpgrade
и onDowngrade
метод в SQLiteOpenHelper
(который я предполагаю, что вы расширяете), где метод onUpgrade
был бы намного более подходящее место для создания таблицы, но опять-таки: вам необходимо удалить его перед или только выполнить оператор create для первой версии (добавьте if-check в параметр метода newVersion
). В качестве альтернативы вы могли бы add a IF NOT EXISTS
escape sequence, чтобы ваш оператор создания выглядел примерно как CREATE TABLE IF NOT EXISTS Employee...
.
Если вы создаете базу данных в памяти, это не проблема (но тогда ваш database file name would begin with a colon, например «: Employee.db»). Помните, однако, что все ваши данные будут удалены, как только ваша база данных в памяти будет выпущена.
Еще один совет: вы можете проверить свой синтаксис SQL в онлайн-синтаксисе синтаксиса SQL (один пример представлен here, убедитесь, что на панели инструментов вы выбрали правильный SQL-механизм «SQLite»). Эти инструменты подтвердят ваш синтаксис SQL . Тем не менее, они не могут подтвердить действительность логического (т. Е. Ошибки из-за неправильного использования жизненного цикла Android).
Еще одна сторона примечания заключается в том, что имена классов должны, с неписаного стандарта старой школы, начинаться с прописных букв.Таким образом, ваш dbhelper
класс (и тем самым ваш конструктор) должен на самом деле читать Dbhelper
или даже лучше DbHelper
положить LogCat здесь .. – Riser
Где произошла ошибка? Положите трассировку ошибки logcat – matreshkin
попытайтесь удалить свою базу данных из каталога данных и еще раз запустить свою программу. –