2013-06-10 4 views
-1

Я пытаюсь создать таблицу в android с помощью SQLite, но произошла ошибка «Нет такого столбца». Я проверил все правильно, пожалуйста, помогите мне решить эту проблему. БлагодаряОшибка при создании таблицы в SQLite

кода для создания таблицы является:

public static final String DATABASE_NAME="Employee.db"; 
public static final int DATABASE_VERSION=1; 
public static final String TABLE_EMPLOYEE="Employee"; 
public static final String COLUMN_ID="Empid"; 
public static final String COLUMN_NAME="Empname"; 
public static final String COLUMN_SALARY="Empsalary"; 
public static final String createReq="CREATE TABLE " + TABLE_EMPLOYEE + "(" 
     + COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_NAME + " TEXT," 
     + COLUMN_SALARY + " NUMERIC" + ")"; 

public dbhelper(Context context) 
{ 
    super(context,DATABASE_NAME,null,DATABASE_VERSION); 
     Log.e("dbhelper constructor: ", "dbhelper const called.."); 
} 
@Override 
public void onCreate(SQLiteDatabase db) 
{ 
    Log.e("onCreate method of dbhelper: ", "onCreate method of dbhelper method called.."); 
    db.execSQL(createReq); 
} 

Когда я печатал имена столбцов таблицы в LogCat, он отображает Col: EmpId Col: EmpnameTEXTEmpsalaryNUMERIC

+0

положить LogCat здесь .. – Riser

+0

Где произошла ошибка? Положите трассировку ошибки logcat – matreshkin

+0

попытайтесь удалить свою базу данных из каталога данных и еще раз запустить свою программу. –

ответ

0

Я думаю, что вы пропустили пространство над здесь:

Try ниже код и дайте мне знать:

public static final String createReq = "CREATE TABLE " + TABLE_EMPLOYEE + "(" 
     + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT NOT NULL, " 
     + COLUMN_SALARY + " NUMERIC " + ")"; 
+0

Все еще не работает ... – Payal

0

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

+0

onCreate - это правильное место для создания ваших таблиц. onUpgrade, как следует из названия, является местом, где вы выполняете свои миграции при изменении версии. –

+0

@KumarBibek: Да, и когда вы создаете свою базу данных в первый раз, она обновится от ничего, до какой-либо версии, которую вы ей дадите. Вам следует избегать выполнения длительных операций в 'onCreate', и поскольку вы обращаетесь к файлу в файловой системе (да, базы данных SQLite - это файлы-базы данных), вы очень выполняете« длительную операцию », следовательно, вам следует избегать этого в 'onCreate'. Документация (http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html) предполагает, что оба метода подходят для использования, хотя ... – dbm

+0

Идя по той же логике, вы также не должны выполнять длительные операции в вашем методе onUpgrade. Я согласен, что если вы создадите свои таблицы в onUpgrade, это сработает, но это, согласно документам, не подходит для создания ваших таблиц. И, конечно, я знаю, что они файловые базы данных :) –

Смежные вопросы