您好我正在开发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);
}
答案 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)创建自己的并通过代码实现自动增量选项(不推荐)