我正在设置一个 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: 表 groupTable 没有名为给定位置的列: 编译时: INSERT INTO groupTable(given_location,给定时间,给定日期、给定期间、给定运动、给定名称) 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);
最佳答案
问题可能是您更改了数据库结构,但没有更改数据库版本。这是一个奇怪的问题,我第一次不得不花很多时间来解决。
在您的 DatabaseHelper 类中应该有一个版本号,只要在更改任何表架构等时将其增加 1 即可。
编辑
您在创建 SQL 表时在“TEXT”之前缺少一个空格。
应该是:
... + KEY_LOCATION+“文本”...
修复该问题后,再次增加版本号。
关于java - Android SQLite 对表列的排序方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10771610/