SQLite异常:没有这样的列

时间:2015-10-30 18:10:37

标签: android database sqlite

我正在使用SQLite数据库,我得到了这个错误:
    引起:android.database.sqlite.SQLiteException:没有这样的列:coin(代码1):,同时编译:SELECT _id,name,age,coin,log FROM person_tb1 WHERE name =?

我不知道为什么它告诉我这个!
我在它工作正常之前尝试过它!

这是我的代码:

public ArrayList<Person> getPersons (){

    persons.clear();

    SQLiteDatabase dba = this.getReadableDatabase();

    Cursor cursor = dba.query(Constants.TABLE_NAME,
            new String[]{Constants.KEY_ID, Constants.NAME, Constants.AGE , Constants.COIN , Constants.LOG},null,null,null,null,null);

    if(cursor.moveToFirst()){
        do {
            Person p = new Person();
            p.setName(cursor.getString(cursor.getColumnIndex(Constants.NAME)));
            p.setAge(cursor.getInt(cursor.getColumnIndex(Constants.AGE)));
            p.setCoin(cursor.getInt(cursor.getColumnIndex(Constants.COIN)));
            p.setLog(cursor.getInt(cursor.getColumnIndex(Constants.LOG)));
            p.setPersonId(cursor.getInt(cursor.getColumnIndex(Constants.KEY_ID)));

            persons.add(p);

        }while (cursor.moveToNext());

        cursor.close();
        dba.close();
    }
    return persons;
}

这里是select方法:

 public void onCreate(SQLiteDatabase db) {
    String CREATE_TABLE = "CREATE TABLE " + Constants.TABLE_NAME + "(" +
            Constants.KEY_ID + " INTEGER PRIMARY KEY, " + Constants.NAME + " TEXT, "+
            Constants.AGE + " INT, " + Constants.COIN + " INT, " + Constants.LOG + " INT);";

    db.execSQL(CREATE_TABLE);
}

//编辑:( OnUpgrade)

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS" + Constants.TABLE_NAME);

    onCreate(db);
}

1 个答案:

答案 0 :(得分:3)

狂野猜测:您在运行应用后添加了列 如果是这样(i have tried it before its working fine !),只需取消暂停并重新安装您的应用。

或者您可以简单地增加DATABASE_VERSION常量。

<强> [编辑]

但是第二种方法不起作用,因为您当前的onUpgrade()方法错误

db.execSQL("DROP TABLE IF EXISTS" + Constants.TABLE_NAME);

不会删除表格。因此,它甚至不会被重新创造 您需要在表名前插入空格

db.execSQL("DROP TABLE IF EXISTS " + Constants.TABLE_NAME);