【问题标题】:Android create table errorAndroid创建表错误
【发布时间】:2012-04-02 11:38:57
【问题描述】:

当我第一次尝试创建表时,我总是收到以下错误消息:

sqlite 返回:错误代码 = 1,msg = AUTOINCREMENT 只允许 在整数主键上

我的代码如下所示:

// 调试标识符 private static final String TAG = DatabaseOpenHandler.class.getSimpleName();

// name and verison of the database
private static final String DATABASE_NAME = "OpenConfApp";
private static final int DATABASE_VERSION = 1;

// name and attributes of the table notes
public static final String TABLE_NAME_NOTES = "notes";
public static final String _NOTE_ID = "_noteId";
public static final String NOTE_CONFERENCE = "conferenceId";
public static final String NOTE_DATE = "dateInMillis";
public static final String NOTE_TEXT = "noteText";

// create table notes
public static final String TABLE_NOTES_CREATE = "CREATE TABLE "
        + TABLE_NAME_NOTES + " (" + _NOTE_ID
        + "INTEGER PRIMARY KEY AUTOINCREMENT, " + NOTE_CONFERENCE
        + " INTEGER, " + NOTE_DATE + " INTEGER, " + NOTE_TEXT
        + " INTEGER);";

// drop table notes
public static final String TABLE_NOTES_DROP = "DROP TABLE IF EXIST "
        + TABLE_NAME_NOTES;

public DatabaseOpenHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    Log.d(TAG, "onCreate called");
    db.execSQL(TABLE_NOTES_CREATE);
}

抱歉,我是 Android 编程新手。

【问题讨论】:

    标签: android sql


    【解决方案1】:

    你的代码是正确的只是你在你的第一个整数语句之前错过了一个空格。写这个:

    public static final String TABLE_NOTES_CREATE = "CREATE TABLE "
        + TABLE_NAME_NOTES + " (" + _NOTE_ID
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NOTE_CONFERENCE
        + " INTEGER, " + NOTE_DATE + " INTEGER, " + NOTE_TEXT
        + " INTEGER);";
    

    【讨论】:

    • 你为什么要重复我? -_-
    • @sebbl.sche 丑闻。我是第一个给出这个答案的人。
    • 亲爱的,但我真的没有看到你发布的答案,因为我的网络很慢。真的很抱歉。
    【解决方案2】:
    + "INTEGER PRIMARY KEY AUTOINCREMENT, " + NOTE_CONFERENCE 
    

    你错过了那里的空白......

    + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NOTE_CONFERENCE
    

    【讨论】:

      【解决方案3】:

      整数主键不需要AUTOINCREMENT,它的语义已经包含在“主键”中,参见here

      【讨论】:

        【解决方案4】:

        这是由于输入错误导致的问题 中间没有空格

        NOTE_ID 和 INTEGER PRIMARY KEY AUTOINCREMENT

        public static final String TABLE_NOTES_CREATE = "CREATE TABLE "
                + TABLE_NAME_NOTES + " (" + _NOTE_ID
                + "INTEGER PRIMARY KEY AUTOINCREMENT, " + NOTE_CONFERENCE
                + " INTEGER, " + NOTE_DATE + " INTEGER, " + NOTE_TEXT
                + " INTEGER);";
        

        你应该在它们之间留出空间

        public static final String TABLE_NOTES_CREATE = "CREATE TABLE "
                + TABLE_NAME_NOTES + " (" + _NOTE_ID
                + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NOTE_CONFERENCE
                + " INTEGER, " + NOTE_DATE + " INTEGER, " + NOTE_TEXT
                + " INTEGER);";
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-23
          • 1970-01-01
          • 2016-01-21
          • 1970-01-01
          • 2013-05-14
          • 2017-11-04
          相关资源
          最近更新 更多