<имя определения столбца> или <ограничение таблицы> ожидается, получил 'индекс' - PullRequest
0 голосов
/ 25 мая 2019

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

Я пытался изменить пробелы, но это только изменило место, где появляется ошибка.Содержание сообщения об ошибке не изменяется

Это часть, которую я объявил в строках

 public class TaskEntry implements BaseColumns {
        public static final String TABLE = "Users";
        public static final String INDEX = "Index";
        public static final String COL_TASK_TITLE = "title";
    }

Ниже приведен мой код для создания таблицы:

 public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE " + Item_contract.TaskEntry.TABLE + " ( " +
                Item_contract.TaskEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,  " +
                Item_contract.TaskEntry.INDEX + " INTEGER NOT NULL, " +
                Item_contract.TaskEntry.COL_TASK_TITLE + " TEXT NOT NULL" + ");";

        db.execSQL(createTable);
    }

1 Ответ

0 голосов
/ 25 мая 2019

Вы не можете использовать INDEX в качестве имени столбца, так как это ключевое слово.

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

SQL в понимании SQLite - ключевые слова SQLite

Так измени

 public static final String INDEX = "Index";

возможно

public static final String INDEX = "IX";

Вы можете заключить имя столбца, если вы действительно хотите, чтобы оно было INDEX, например

public static final String INDEX = "[Index]";

Согласно: -

If you want to use a keyword as a name, you need to quote it. There are four ways of quoting keywords in SQLite:

'keyword'       A keyword in single quotes is a string literal.
"keyword"       A keyword in double-quotes is an identifier.
[keyword]       A keyword enclosed in square brackets is an identifier. This is not standard SQL. This quoting mechanism is used by MS Access and SQL Server and is included in SQLite for compatibility.
`keyword`       A keyword enclosed in grave accents (ASCII code 96) is an identifier. This is not standard SQL. This quoting mechanism is used by MySQL and is included in SQLite for compatibility.

SQL в понимании SQLite - ключевые слова SQLite

Примечание

Вам нужно будет выполнить одно из следующих действий, чтобы запустить метод onCreate и тем самым изменить схему: -

  • Удалить данные приложения.
  • Удалите приложение.
...