我正在建立一个SQLite数据库,我已经设置了大多数事情,我认为他们应该是这样。主要错误是列不在应该的位置。我在字符串中初始化数据库列名称,如下所示:
public static final String KEY_ROWID = "_id";
public static final String KEY_SPORT = "given_sport";
public static final String KEY_NAME = "given_name";
public static final String KEY_DATE = "given_date";
public static final String KEY_TIME = "given_time";
public static final String KEY_PERIOD = "given_period";
public static final String KEY_LOCATION = "given_location";
什么时候创建一个包含列名的表:
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_SPORT + " TEXT NOT NULL, " +
KEY_NAME + " TEXT NOT NULL, " +
KEY_DATE + " TEXT NOT NULL, " +
KEY_TIME + " TEXT NOT NULL, " +
KEY_PERIOD + " TEXT NOT NULL, " +
KEY_LOCATION + "TEXT NOT NULL);"
);
现在的问题是我收到以下错误:
05-27 04:13:01.448: E/Database(273): android.database.sqlite.SQLiteException: table groupTable has no column named given_location: , while compiling: INSERT INTO groupTable(given_location, given_time, given_date, given_period, given_sport, given_name) VALUES(?, ?, ?, ?, ?, ?);
似乎正在重新排序表名,这就是导致插入错误的原因。我很无能为力,我真的很感激你的帮助。
编辑:这是INSERT命令
ContentValues cv = new ContentValues();
cv.put(KEY_SPORT, sportInput);
cv.put(KEY_NAME, nameInput);
cv.put(KEY_DATE, dateInput);
cv.put(KEY_TIME, timeInput);
cv.put(KEY_PERIOD, periodInput);
cv.put(KEY_LOCATION, locationInput);
return dbSQL.insert(DATABASE_TABLE, null, cv);
答案 0 :(得分:2)
问题可能是您更改了数据库结构而不是数据库版本。这是一个奇怪的问题,我不得不花费大量时间来搞清楚。
在DatabaseHelper类中,应该有一个版本号,只要在更改任何表架构等时将其递增1。
修改
您在SQL表创建中的“TEXT”之前缺少一个空格。
应该是:
... + KEY_LOCATION +“TEXT”......
修复后,再次增加版本号。
答案 1 :(得分:1)
表列的顺序不会产生“无列”错误。如果您在运行应用程序至少一次但未增加数据库版本之后将列添加到表中,则这是导致此错误的一种方法。
这些列的顺序:
INSERT INTO groupTable(given_location, given_time, given_date, given_period, given_sport, given_name) ...
取决于编写INSERT
语句时列的顺序,它不是基于CREATE
命令的固定顺序。