Android - SQLite - 没有这样的列错误(greenDAO)

时间:2013-05-30 11:39:02

标签: android sqlite greendao

我使用greenDAO创建了我的表结构,在更新下表时,我遇到了以下错误:

android.database.sqlite.SQLiteException: no such column: BODY_LOG_ENTRY._id: ,
 while compiling: UPDATE BODY_LOG_ENTRY SET 
'BODY_LOG_ENTRY._id'=?,
'BODY_LOG_ENTRY.FK_DAY'=?,
'BODY_LOG_ENTRY.DAY_ORDER'=?,
'BODY_LOG_ENTRY.DESCRIPTION'=?,
'BODY_LOG_ENTRY.BODY_WEIGHT'=?,
'BODY_LOG_ENTRY.BODY_SIZE'=?,
'BODY_LOG_ENTRY.BODY_FAT_FORMULA'=?,
'BODY_LOG_ENTRY.BODY_FAT_FORMULA_DATA1'=?,
'BODY_LOG_ENTRY.BODY_FAT_FORMULA_DATA2'=?,
'BODY_LOG_ENTRY.BODY_FAT_FORMULA_DATA3'=?,
'BODY_LOG_ENTRY.BODY_FAT_FORMULA_DATA4'=?,
'BODY_LOG_ENTRY.BODY_FAT_FORMULA_DATA5'=?,
'BODY_LOG_ENTRY.BODY_FAT_FORMULA_DATA6'=?,
'BODY_LOG_ENTRY.BODY_FAT_FORMULA_DATA7'=?,
'BODY_LOG_ENTRY.BODY_FAT_FORMULA_DATA8'=?,
'BODY_LOG_ENTRY.BODY_FAT_FORMULA_DATA9'=?,
'BODY_LOG_ENTRY.BODY_FAT'=?,
'BODY_LOG_ENTRY.NECK'=?,
'BODY_LOG_ENTRY.SHOULDER'=?,
'BODY_LOG_ENTRY.CHEST'=?,
'BODY_LOG_ENTRY.UNDERCHEST'=?,
'BODY_LOG_ENTRY.WAIST'=?,
'BODY_LOG_ENTRY.ARM_LEFT'=?,
'BODY_LOG_ENTRY.ARM_RIGHT'=?,
'BODY_LOG_ENTRY.FOREARM_LEFT'=?,
'BODY_LOG_ENTRY.FOREARM_RIGHT'=?,
'BODY_LOG_ENTRY.BUTT'=?,
'BODY_LOG_ENTRY.THIGHES_LEFT'=?,
'BODY_LOG_ENTRY.THIGHES_RIGHT'=?,
'BODY_LOG_ENTRY.CALVES_LEFT'=?,
'BODY_LOG_ENTRY.CALVES_RIGHT'=? 
WHERE BODY_LOG_ENTRY.'_id'=?
  • 我已经检查过所有列是否存在,而且确实存在!
  • 我检查了列的名称,但它们匹配
  • 我检查了列名是否与一个关键字匹配,但我找不到一个(http://www.sqlite.org/lang_keywords.html

有人知道问题是什么吗?

以下是当前的创建表查询:

public static void createTable(SQLiteDatabase db, boolean ifNotExists) {
    String constraint = ifNotExists? "IF NOT EXISTS ": "";
    db.execSQL("CREATE TABLE " + constraint + "'BODY_LOG_ENTRY' (" + //
            " '_id' INTEGER PRIMARY KEY ," + // 0: id
            " 'FK_DAY' INTEGER NOT NULL ," + // 1: fkDay
            " 'DAY_ORDER' INTEGER NOT NULL ," + // 2: dayOrder
            " 'DESCRIPTION' TEXT NOT NULL ," + // 3: description
            " 'BODY_WEIGHT' REAL NOT NULL ," + // 4: bodyWeight
            " 'BODY_SIZE' INTEGER NOT NULL ," + // 5: bodySize
            " 'BODY_FAT_FORMULA' INTEGER NOT NULL ," + // 6: bodyFatFormula
            " 'BODY_FAT_FORMULA_DATA1' REAL NOT NULL ," + // 7: bodyFatFormulaData1
            " 'BODY_FAT_FORMULA_DATA2' REAL NOT NULL ," + // 8: bodyFatFormulaData2
            " 'BODY_FAT_FORMULA_DATA3' REAL NOT NULL ," + // 9: bodyFatFormulaData3
            " 'BODY_FAT_FORMULA_DATA4' REAL NOT NULL ," + // 10: bodyFatFormulaData4
            " 'BODY_FAT_FORMULA_DATA5' REAL NOT NULL ," + // 11: bodyFatFormulaData5
            " 'BODY_FAT_FORMULA_DATA6' REAL NOT NULL ," + // 12: bodyFatFormulaData6
            " 'BODY_FAT_FORMULA_DATA7' REAL NOT NULL ," + // 13: bodyFatFormulaData7
            " 'BODY_FAT_FORMULA_DATA8' REAL NOT NULL ," + // 14: bodyFatFormulaData8
            " 'BODY_FAT_FORMULA_DATA9' REAL NOT NULL ," + // 15: bodyFatFormulaData9
            " 'BODY_FAT' REAL NOT NULL ," + // 16: bodyFat
            " 'NECK' REAL NOT NULL ," + // 17: neck
            " 'SHOULDER' REAL NOT NULL ," + // 18: shoulder
            " 'CHEST' REAL NOT NULL ," + // 19: chest
            " 'UNDERCHEST' REAL NOT NULL ," + // 20: underchest
            " 'WAIST' REAL NOT NULL ," + // 21: waist
            " 'ARM_LEFT' REAL NOT NULL ," + // 22: armLeft
            " 'ARM_RIGHT' REAL NOT NULL ," + // 23: armRight
            " 'FOREARM_LEFT' REAL NOT NULL ," + // 24: forearmLeft
            " 'FOREARM_RIGHT' REAL NOT NULL ," + // 25: forearmRight
            " 'BUTT' REAL NOT NULL ," + // 26: butt
            " 'THIGHES_LEFT' REAL NOT NULL ," + // 27: thighesLeft
            " 'THIGHES_RIGHT' REAL NOT NULL ," + // 28: thighesRight
            " 'CALVES_LEFT' REAL NOT NULL ," + // 29: calvesLeft
            " 'CALVES_RIGHT' REAL NOT NULL );"); // 30: calvesRight
    // Add Indexes
    db.execSQL("CREATE INDEX " + constraint + "IDX_BODY_LOG_ENTRY_FK_DAY ON BODY_LOG_ENTRY" +
            " (FK_DAY);");
    db.execSQL("CREATE INDEX " + constraint + "IDX_BODY_LOG_ENTRY_DAY_ORDER ON BODY_LOG_ENTRY" +
            " (DAY_ORDER);");
}

PS:我只能说,表前缀不应该是更新查询的一部分,因为没有它们,查询可以工作......但奇怪的是,我所有的其他(> 20)表工作......只是这个没有

2 个答案:

答案 0 :(得分:1)

更新任何字段时,此更新不会在实际数据库中刷新。对我有用的解决方案是删除数据库中的所有表,然后再次创建所有表。就我而言,我的数据库是空的。

请参阅下一个链接:How to clean/delete greenDao database

其他选项是在现有数据库上执行ALTER TABLE。

答案 1 :(得分:0)

我刚遇到同样的问题,你可以试试这个: 检查表是新表还是旧表,因为我们总是使用“if not exists”创建表。 PS:  我来自中国,我的英语很差,祈祷你能理解我的话。  答案是针对那些在我之后遇到同样问题的人。