Android SQLiteException没有这样的列

时间:2014-07-22 12:13:29

标签: android sqlite

我收到错误:

android.database.sqlite.SQLiteException: no such column: app_table (code 1): , while compiling: SELECT _id FROM apps WHERE app_table=? AND app_row=? AND app_column=?

"选择"在这部分代码中被调用:

public int getKeyId(int table, int row, int column) {
    SQLiteDatabase db = this.getWritableDatabase();

    Cursor cursor = db.query(DB_TABLE, new String[] { KEY_ID }, KEY_TABLE+ "=?" + " AND "
            + KEY_ROW+ "=?" + " AND "+ KEY_COLUMN+ "=?",
            new String[] { String.valueOf(table), String.valueOf(row),
            String.valueOf(column)}, null, null, null, null );
    if (cursor.getCount()==0) {
        return -1;
    }
    return cursor.getInt(0);
}

这些是我用来创建数据库的字符串:

private static final String TAG = "SQLiteOpenHelper";
private static final String DB_NAME = "apps_tables";
private static final int DB_VERSION = 1;
private static final String DB_TABLE = "apps";
/**
 * Columns
 */
private static final String KEY_ID = "_id";
private static final String KEY_TABLE = "app_table";
private static final String KEY_ROW = "app_row";
private static final String KEY_COLUMN = "app_column";
private static final String KEY_NAME = "app_name";

/**
 * Creation statement
 */
private static final String DB_CREATE = "CREATE TABLE " + DB_TABLE + " (" + KEY_ID +
        " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_TABLE + " INTEGER NOT NULL, "
        + KEY_ROW + " INTEGER NOT NULL, " + KEY_COLUMN + " INTEGER NOT NULL, " +
        KEY_NAME +" TEXT NOT NULL);";

onCreate calls:

database.execSQL(DB_CREATE);

有谁知道为什么我会收到此错误? 谢谢!

2 个答案:

答案 0 :(得分:4)

转到设置清除应用数据,然后重新运行。

这个问题出现了,因为更新或重新安装的数据库中的应用程序没有被android删除。在这种情况下,SQLiteOpenHelper不会调用onCreate(SQLiteDatabase db),而是检查数据库版本更新。您既没有更新数据库版本也没有正确编写onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)方法,因此以前的数据库中不存在该列。当您清除应用程序数据,删除数据库,然后当您再次启动应用程序时,它再次调用onCreate(SQLiteDatabase数据库),因此您的create sql再次运行,您不会得到该异常。实现此目的的实际方法是增加数据库版本并使用onUpgrade方法更改数据库更改。

为了开发目的,您可以使用清除应用程序数据,但在生产中请确保您已升级数据库版本并使用onUpgrade方法。

答案 1 :(得分:0)

没有这样的列错误意味着您在创建表时获得了成功,但是没有创建该表的列,以便了解

创建表命令得到执行但我认为你的列没有形成所以请检查你的查询运行此查询在sqlite browesr检查这是否正常工作?

private static final String DB_CREATE = "CREATE TABLE " + DB_TABLE + " (" + KEY_ID +
        " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_TABLE + " INTEGER NOT NULL, "
        + KEY_ROW + " INTEGER NOT NULL, " + KEY_COLUMN + " INTEGER NOT NULL, " +
        KEY_NAME +" TEXT NOT NULL);";

由于这些行

,您的错误即将到来

检查DDMS DATA> DATA文件夹,该表存在于那里?

尝试将此代码添加到sqliteopnhelper类的onCreate方法

public void onCreate(SQLiteDatabase db) {

db.execSQL(" CREATE TABLE " + DB_TABLE + " (" +
        KEY_ID + "  INTEGER PRIMARY KEY AUTOINCREMENT, " +
        KEY_TABLE + " INTEGER NOT NULL, " +
        KEY_ROW + " INTEGER NOT NULL, " +
        KEY_COLUMN + " INTEGER NOT NULL, " +
        KEY_NAME + " INTEGER NOT NULL);");
}