我按照http://developer.android.com/training/basics/data-storage/databases.html
的指南进行操作进行微小的更改以满足我的需求,但是我的应用程序在尝试创建表时立即崩溃。 Logcat显示sqlite异常,索引附近的语法错误。即使我检查了三倍,语法也是正确的。
例外情况为:near "index": syntax error (code 1): , while compiling: CREATE TABLE my_locations ( index INTEGER PRIMARY KEY, loc_name TEXT, loc_id TEXT);
这是我的代码
private static final String TEXT_TYPE = " TEXT";
private static final String COMMA_SEP = ", ";
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + FeedEntry.TABLE_NAME + " ( " +
FeedEntry.COLUMN_NAME_INDEX + " INTEGER PRIMARY KEY, " +
FeedEntry.COLUMN_NAME_LOC_NAME + TEXT_TYPE + COMMA_SEP +
FeedEntry.COLUMN_NAME_LOC_ID + TEXT_TYPE +
");";
private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + FeedEntry.TABLE_NAME;
// If you change the database schema, you must increment the database version.
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "PersonalLocations.db";
public PersonalLocationsDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
答案 0 :(得分:2)
INDEX
是一个SQLite 保留字,不能用作名称。
参考:http://www.sqlite.org/lang_keywords.html
因此,只需将index
重命名为id
(按照惯例,将其_id
)或您更喜欢的内容重命名。
多个数据库帮助程序方法需要_id
(但您可以使用rowID AS _id
技巧)。
您 还可以跳过明确添加ID字段,因为隐藏的rowId
字段可用作替代字段。
至少,对于小型结构(1个桌子和几个字段等)。
答案 1 :(得分:1)
您不能在sqlite表列名中使用保留字,因为index
是保留字。