Java androidsqlite以不同的方式对表列进行排序

Java androidsqlite以不同的方式对表列进行排序,java,android,database,sqlite,Java,Android,Database,Sqlite,我正在建立一个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 S

我正在建立一个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没有名为给定位置的列,编译时:插入到groupTable(给定位置、给定时间、给定日期、给定时段、给定运动、给定名称)值(?、、、、、?)

表名似乎正在重新排序,这就是导致插入错误的原因。不过我不知道,我真的很感激你能帮我

编辑:这是插入命令

    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);

表列的顺序不会创建“无列”错误。如果在运行应用程序至少一次后已将列添加到表中,但尚未增加数据库版本,则这是导致此错误的一种方法

这些列的顺序:

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

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

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

在DatabaseHelper类中应该有一个版本号,只要在更改任何表模式等时将其增加1即可

编辑

在创建SQL表时,在“文本”之前缺少一个空格

应该是:

。。。 +按键位置+“文本”


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

我第一次运行时就遇到了这个错误。之后,我重新命名了所有的列,认为这可能是某种名称冲突的事情。这有什么不同吗?看到你的编辑了。使用insert命令编辑文章。我用ContentValues来做这件事,所以也许这与此有关?是的(对你的第一个评论)。如果更改Java/Android代码,则需要删除该表并再次创建它以更改SQLite数据库。最简单的方法是使用ContentProvider增加数据库版本。(对您的第二条注释)并且ContentProvider中列的顺序不会导致错误,您的代码看起来很好。我更新了版本号,我假设它调用了onUpgrade(),我在其中包含了所有drop表内容。没有变化。@Sam,我敢肯定,如果我自己犯了那个错误,我会花几个小时来寻找它。:)哇!我觉得自己很笨。修正了,但我不得不改变版本。一直这么做有点烦人。但是谢谢你的帮助!