我知道这个问题已经被问过多次了,但是我的语法有问题,我无法弄清楚是什么。这是添加我的专栏的方法:
财产声明:
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);
我的语法有什么问题?非常感谢您的帮助!
答案 0 :(得分:0)
对于要按照 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))" +
");";
要实施更改,您必须删除表(如果存在)。最简单的方法是:
,然后重新运行该应用程序(假设现有数据(如有)可能会丢失)。