Java androidsqlite以不同的方式对表列进行排序
我正在建立一个SQLite数据库,我已经按照我认为应该的方式设置了大部分内容。主要错误必须与列不在其应位于的位置有关。我用如下字符串初始化了数据库列名: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
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,我敢肯定,如果我自己犯了那个错误,我会花几个小时来寻找它。:)哇!我觉得自己很笨。修正了,但我不得不改变版本。一直这么做有点烦人。但是谢谢你的帮助!