在sqlite中使用autoincrement关键字时出错

时间:2012-01-02 08:12:20

标签: android sqlite

您好我正在开发Android应用程序,现在我必须使用sqlite数据库来存储手机中的一些数据。现在当我创建没有autoincrement关键字的数据库时。但是当我使用这个关键字时出现错误

  

" java.lang.RuntimeException:无法启动活动   ComponentInfo {} abc.tt/abc.tt.Home:   android.database.sqlite.SQLiteException:near" autoincrement&#34 ;: syntax   错误:创建表calSimpleNote(_id整数PRIMERY KEY   autoincrement,Cal_Id TEXT,User_ID INTEGER,Cal_Date TEXT,注意   TEXT,Involvers TEXT,DeleteReason TEXT,Create_Date TEXT,Changed_date   TEXT,EmailInvolvers TEXT,RemindSameDay INTEGER,RemindAllDay   INTEGER,RemindBeforeDays INTEGER);"

Here is my code to create database. 创建数据库时出错。如果有人有任何想法,请帮助我。谢谢。

我使用以下链接进行参考。This

我正在使用此代码插入,但我没有递增。

public long insertCalSimpleNote(String noteId,int userId,String cal_date,String note,String Involved,String DeleteReason,String Create_Date,                                     String Changed_date,String emailInvolvers,int remindSameday,int remindAllday,int remindBeforeday){

    ContentValues initialValues = new ContentValues();

    initialValues.put("_Id", 0);
    initialValues.put("Cal_Id", noteId);
    initialValues.put("User_ID", userId);
    initialValues.put("Cal_Date", cal_date);
    initialValues.put("Note", note);
    initialValues.put("Involvers", Involved);
    initialValues.put("DeleteReason", DeleteReason);
    initialValues.put("Create_Date", Create_Date);
    initialValues.put("Changed_date", Changed_date);
    initialValues.put("EmailInvolvers", emailInvolvers);
    initialValues.put("RemindSameDay", remindSameday);
    initialValues.put("RemindAllDay", remindAllday);
    initialValues.put("RemindBeforeDays", remindBeforeday);

    return db.insert("calSimpleNote", null, initialValues);
}

It set 0 at every row.

//Create Table
private static final String CREATE_SIMPLENOTE = "create table calSimpleNote (_id integer PRIMERY KEY, Cal_Id TEXT , User_ID INTEGER , Cal_Date TEXT , Note TEXT,Involvers TEXT, "+
                                                "DeleteReason TEXT ,Create_Date TEXT ,Changed_date TEXT,EmailInvolvers TEXT, "+ 
                                                "RemindSameDay INTEGER, RemindAllDay INTEGER,RemindBeforeDays INTEGER );"; 
@Override
    public void onCreate(SQLiteDatabase db) 
    {
        db.execSQL(CREATE_SIMPLENOTE);
    }

4 个答案:

答案 0 :(得分:2)

声明为INTEGER PRIMARY KEY的列将自动增加。

我从here偷了它:

  

简答:一个声明为INTEGER PRIMARY KEY的列   自动增量。

     

这是一个很长的答案:如果你声明一个表的列   INTEGER PRIMARY KEY,然后每当您在该列中插入NULL时   在表中,NULL自动转换为整数   这是一个大于该列的最大值的一个   表中的其他行,如果表为空,则为1。 (如果是最大的   可能的整数键,9223372036854775807,那么一个未使用的键值是   随机选择。)例如,假设你有一个这样的表:

CREATE TABLE t1(
  a INTEGER PRIMARY KEY,
  b INTEGER
);
     

使用此表,语句

INSERT INTO t1 VALUES(NULL,123);
     

在逻辑上等同于:

INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123);

答案 1 :(得分:1)

autoincrement中没有SQLite个关键字,这就是您收到错误的原因。

声明为INTEGER PRIMARY KEY的列将自动增量。

如果声明一个表的列为INTEGER PRIMARY KEY,那么无论何时在表的该列中插入NULL,NULL都会自动转换为一个整数,该整数大于该值的最大值。表中所有其他行的列,如果表为空,则为1。例如:

CREATE TABLE mytable(
  column1 INTEGER PRIMARY KEY,
  column2 INTEGER
);

这里column1是自动增量。

答案 2 :(得分:1)

试试这个:

//Create Table
private static final String CREATE_SIMPLENOTE = "create table calSimpleNote (_id integer primary key autoincrement, Cal_Id TEXT , User_ID INTEGER , Cal_Date TEXT , Note TEXT,Involvers TEXT, "+
                                                "DeleteReason TEXT ,Create_Date TEXT ,Changed_date TEXT,EmailInvolvers TEXT, "+ 
                                                "RemindSameDay INTEGER, RemindAllDay INTEGER,RemindBeforeDays INTEGER );";

&安培;这样:

public long insertCalSimpleNote(String noteId,int userId,String cal_date,String note,String Involved,String DeleteReason,String Create_Date, String Changed_date,String emailInvolvers,int remindSameday,int remindAllday,int remindBeforeday){

    ContentValues initialValues = new ContentValues();


    initialValues.put("Cal_Id", noteId);
    initialValues.put("User_ID", userId);
    initialValues.put("Cal_Date", cal_date);
    initialValues.put("Note", note);
    initialValues.put("Involvers", Involved);
    initialValues.put("DeleteReason", DeleteReason);
    initialValues.put("Create_Date", Create_Date);
    initialValues.put("Changed_date", Changed_date);
    initialValues.put("EmailInvolvers", emailInvolvers);
    initialValues.put("RemindSameDay", remindSameday);
    initialValues.put("RemindAllDay", remindAllday);
    initialValues.put("RemindBeforeDays", remindBeforeday);

    return db.insert("calSimpleNote", null, initialValues);
}

答案 3 :(得分:0)

SQLite没有自动增量选项。

你可以:

1)创建一个INTEGER PRIMARY KEY类型的列(它将自动递增) 2)创建一个名为ROWID的列,并在插入时将其置为null。 3)创建自己的并通过代码实现自动增量选项(不推荐)