SQLite找不到列

时间:2017-10-22 08:51:29

标签: java android sqlite android-sqlite

我正在创建我的第一个Android应用程序,我在使用sqlite时遇到了困难。我正在使用以下代码来创建我的表。它适用于3个第一列(_ID,COL_TITLE和COL_MAX),但我似乎无法创建最后一列。

String createTable = "CREATE TABLE " + TaskContract.Entry.TABLE + " (" +
                TaskContract.Entry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                TaskContract.Entry.COL_TITLE + " TEXT NOT NULL, " +
                TaskContract.Entry.COL_MAX + " REAL, " +
                TaskContract.Entry.COL_INCREMENT + " REAL " +
                ");";

我尝试像这样获取列索引:

        Cursor cursor = db.query(TaskContract.Entry.TABLE,
                new String[]{TaskContract.Entry._ID,
                        TaskContract.Entry.COL_TITLE,
                        TaskContract.Entry.COL_MAX},
                TaskContract.Entry._ID + " = ?",
                new String[]{String.valueOf(id)},
                null, null, null);

        int idx_id = cursor.getColumnIndex(TaskContract.Entry._ID); //returns 0
        int idx_title = cursor.getColumnIndex(TaskContract.Entry.COL_TITLE); //returns 1
        int idx_max = cursor.getColumnIndex(TaskContract.Entry.COL_MAX); //returns 2
        int idx_inc = cursor.getColumnIndex(TaskContract.Entry.COL_INCREMENT); //returns -1

正如您所见,getColumnIndex为COL_INCREMENT

返回-1

我也尝试过读取这样的数据:

cursor.getString(3)

看起来好像该表只包含3列,我不知道哪里出错了。我已经尝试更新数据库版本并卸载应用程序。

1 个答案:

答案 0 :(得分:1)

您还需要在查询中传递 TaskContract.Entry.COL_INCREMENT 。它目前在您的查询中丢失了。

Cursor cursor = db.query(TaskContract.Entry.TABLE,
            new String[]{TaskContract.Entry._ID,
                    TaskContract.Entry.COL_TITLE,
                    TaskContract.Entry.COL_MAX,
                    TaskContract.Entry.COL_INCREMENT},
            TaskContract.Entry._ID + " = ?",
            new String[]{String.valueOf(id)},
            null, null, null);