#android #sql #sqlite
#Android #sql #sqlite
Вопрос:
Я следую руководству поhttp://developer.android.com/training/basics/data-storage/databases.html
с незначительными изменениями в соответствии с моими потребностями, но мое приложение выходит из строя, как только оно пытается создать таблицу. Logcat отображает исключение sqlite, синтаксическую ошибку рядом с индексом. Хотя я проверил три раза, и синтаксис выглядит правильно.
Исключение гласит: near "index": syntax error (code 1): , while compiling: CREATE TABLE my_locations ( index INTEGER PRIMARY KEY, loc_name TEXT, loc_id TEXT);
Вот мой код
private static final String TEXT_TYPE = " TEXT";
private static final String COMMA_SEP = ", ";
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " FeedEntry.TABLE_NAME " ( "
FeedEntry.COLUMN_NAME_INDEX " INTEGER PRIMARY KEY, "
FeedEntry.COLUMN_NAME_LOC_NAME TEXT_TYPE COMMA_SEP
FeedEntry.COLUMN_NAME_LOC_ID TEXT_TYPE
");";
private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " FeedEntry.TABLE_NAME;
// If you change the database schema, you must increment the database version.
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "PersonalLocations.db";
public PersonalLocationsDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
Ответ №1:
INDEX
является зарезервированным словом SQLite и не может использоваться в качестве имени.
Ссылка:http://www.sqlite.org/lang_keywords.html
Так что просто переименуйте index
в id
(по соглашению, это _id
) или что-то, что вам больше нравится.
_id
требуется несколькими вспомогательными методами базы данных (но вы можете использовать rowID AS _id
трюк).
Вы могли также пропустить явное добавление поля id, поскольку есть скрытое rowId
поле, которое можно использовать в качестве замены.
По крайней мере, для небольших структур (1 таблица и несколько полей или тому подобное).
Ответ №2:
Вы не можете использовать зарезервированные слова в имени столбца таблицы sqlite, так как index
это зарезервированное слово.