android.database.sqlite.SQLiteException: нет такой ошибки столбца, даже если столбец существует - PullRequest
0 голосов
/ 22 марта 2019

Я знаю, что этот вопрос задавался несколько раз, но в моем синтаксисе что-то не так, и я не могу понять, что именно.Это метод, который добавляет мой столбец:

Объявление свойства:

public static final String COLUMN_TS_MILIS = "ts_milis";

public void onCreate(SQLiteDatabase db) {
String query = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" +
        COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
        COLUMN_PRODUCT + " TEXT, " +
        COLUMN_PRICE + " TEXT, " +
        COLUMN_TS + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP," +
        COLUMN_TS_MILIS + "timestamp integer default (cast(strftime('%s', 'now') as int))" +
        ");";
db.execSQL(query);

, и это запрос, который вызывает ошибку:

Cursor totalCof = db.rawQuery("SELECT sum(" + COLUMN_PRICE + ")" + " FROM " + TABLE_NAME
                    + " WHERE "  + COLUMN_TS_MILIS + "= date('now')", null);

Что не так вмой синтаксис?Большое спасибо за помощь!

1 Ответ

0 голосов
/ 22 марта 2019

Для столбца, который должен быть назван согласно COLUMN_TS_MILIS , пропущен пробел между именем столбца и типом столбца, и, следовательно, имя столбца является объединением имени столбца и типа столбца.Таким образом, предполагая, что COLUMN_TS_MILIS преобразуется в миллис, QL будет: -

`CREATE TABLE ......,millistimestamp integer default (cast(strftime('%s', 'now') as int))`

вместо

`CREATE TABLE ......,millis timestamp integer default (cast(strftime('%s', 'now') as int))`

Кроме того, вы указали два типа, отметку времени и целое число, это не будетвопрос SQLIite мудрый, но может привести к путанице.

Как таковой, вы, вероятно, просто хотите

`CREATE TABLE ......,millis integer default (cast(strftime('%s', 'now') as int))`

Как таковой, вы, вероятно, хотите использовать: -

String query = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" +
        COLUMN_ID + " INTEGER PRIMARY KEY, " +
        COLUMN_PRODUCT + " TEXT, " +
        COLUMN_PRICE + " TEXT, " +
        COLUMN_TS + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP," +
        COLUMN_TS_MILIS + " INTEGER DEFAULT (cast(strftime('%s', 'now') as int))" +
        ");";
  • Примечание AUTOINCREMENT был удален, поскольку он почти наверняка вам не нужен, так как он имеет накладные расходы .

Для реализации изменения вам потребуетсябросить стол, как он есть.Самый простой способ сделать это: - *

  1. удалить данные приложения или
  2. удалить приложение

, а затем перезапустить приложение (при условиичто существующие, если таковые имеются, данные могут быть потеряны).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...