2012-01-02 70 views
1

嗨,我正在開發android應用程序,現在我必須使用sqlite數據庫來存儲手機中的一些數據。現在,當我創建數據庫沒有autoincrement關鍵字。但是,當我用這個關鍵字錯誤來自哪個說在sqlite中使用autoincrement關鍵字時出錯

"java.lang.RuntimeException: Unable to start activity ComponentInfo{abc.tt/abc.tt.Home}: android.database.sqlite.SQLiteException: near "autoincrement": syntax error: create table calSimpleNote (_id integer PRIMERY 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);" .

Here is my code to create database. 錯誤出現在創建數據庫。如果有人有任何想法,請幫助我。謝謝。

我使用以下鏈接參考。 This

我正在使用此代碼插入,但我沒有遞增。

衆長insertCalSimpleNote(字符串NoteID,接下來INT userid,字符串cal_date,字符串注意,字符串參與,字符串DeleteReason,字符串CREATE_DATE, 字符串Changed_date,字符串emailInvolvers,INT remindSameday,詮釋remindAllday,詮釋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

,則不需要此行: initialValues。把(「_ Id」,0) – 2012-01-02 09:19:17

+0

我已經刪除了它。但den沒有插入任何值,只插入「」。 – 2012-01-02 09:22:19

+0

你可以分享你的表格創建代碼嗎?只是SQl? – 2012-01-02 09:34:34

回答

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); 
} 
2

聲明爲INTEGER PRIMARY KEY的列將自動遞增。

我偷了它here

Short answer: A column declared INTEGER PRIMARY KEY will autoincrement.

Here is the long answer: If you declare a column of a table to be INTEGER PRIMARY KEY, then whenever you insert a NULL into that column of the table, the NULL is automatically converted into an integer which is one greater than the largest value of that column over all other rows in the table, or 1 if the table is empty. (If the largest possible integer key, 9223372036854775807, then an unused key value is chosen at random.) For example, suppose you have a table like this:

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

With this table, the statement

INSERT INTO t1 VALUES(NULL,123); 

is logically equivalent to saying:

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

請看我編輯的問題。 – 2012-01-02 08:41:53

1

有一個在SQLite沒有autoincrement關鍵字,這就是爲什麼你得到一個錯誤。

聲明爲INTEGER PRIMARY KEY的列將自動增加。

如果您聲明表的列爲INTEGER PRIMARY KEY,那麼無論何時將NULL插入該表的該列中,NULL都會自動轉換爲比該列的最大值大1的整數表中的其他行,或者如果表爲空,則爲1。例如:

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

這裏column1是自動遞增的。

+0

請看我編輯的問題。 – 2012-01-02 08:41:34

+0

您可以嘗試一種方式進行測試。插入第一行,明確指定要開始的行ID。然後,SQLite將插入比先前最高的行ID。 – 2012-01-02 08:52:51

+0

好吧,讓我試試看。 – 2012-01-02 08:53:58

0

SQLite沒有自動增量選項。

您可以:

1)創建類型的INTEGER PRIMARY KEY的列(它會自動增加) 2)創建一個名爲ROWID列,並住了空的刀片。 3)創建您自己和實現通過您的代碼自動增量選項(不推薦)

+0

請看我編輯的問題。 – 2012-01-02 08:41:47

相關問題