【问题标题】:android.database.sqlite.SQLiteException: no such column error even if column existsandroid.database.sqlite.SQLiteException:即使列存在也没有这样的列错误
【发布时间】:2019-08-13 17:40:46
【问题描述】:

我知道这个问题已被多次询问,但我的语法有问题,我不知道是什么问题。这是添加我的专栏的方法:

财产声明:

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);

我的语法有什么问题?非常感谢您的帮助!

【问题讨论】:

  • 在此处添加一个空格:COLUMN_TS_MILIS + " timestamp......."timestamp 之前,然后卸载应用程序并重新运行。

标签: sqlite


【解决方案1】:

对于按照 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 已被删除,因为您几乎可以肯定不需要它,因为它有 overheads

要实施更改,您必须删除该表,因为它存在。最简单的方法是:-

  1. 删除应用数据或
  2. 卸载应用程序

然后重新运行应用程序(假设现有数据(如果有的话)可能会丢失)。

【讨论】:

    猜你喜欢
    • 2013-05-25
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2012-06-26
    • 2018-12-20
    相关资源
    最近更新 更多