我正在创建我的第一个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列,我不知道哪里出错了。我已经尝试更新数据库版本并卸载应用程序。
答案 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);