2

我正在建立一个 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);
4

2 回答 2

2

问题可能是您更改了数据库结构而不是数据库版本。这是一个奇怪的问题,我第一次不得不花很多时间弄清楚。

在您的 DatabaseHelper 类中应该有一个版本号,只要您更改任何表架构等,只需将其增加一即可。

编辑

您在 SQL 表创建中的“TEXT”之前缺少一个空格。

它应该是:

... + KEY_LOCATION+ “文本” ...

一旦你解决了这个问题,再次增加版本号。

于 2012-05-27T04:27:52.420 回答
1

表列的顺序不会产生“无列”错误。如果您在运行应用程序至少一次后将该列添加到表中但没有增加数据库版本,这是导致此错误的一种方法。

这些列的顺序:

INSERT INTO groupTable(given_location, given_time, given_date, given_period, given_sport, given_name) ...

取决于您编写INSERT语句时列的顺序,它不是基于CREATE命令的固定顺序。

于 2012-05-27T04:21:11.530 回答