尝试在android中创建表时SQlite异常

时间:2014-07-01 17:13:04

标签: android sql sqlite

我按照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);
    }

2 个答案:

答案 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保留字