2012-01-02 2 views
1

Привет, я разрабатываю приложение для Android. Теперь мне нужно использовать базу данных sqlite для хранения некоторых данных в телефоне. Теперь, когда я создаю базу данных без ключевого слова autoincrement. Но когда я использую это ключевое слово ошибка приходит которая говоритОшибка при использовании ключевого слова autoincrement в sqlite

"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. Ошибка приходит во время создания базы данных. Помогите мне, если кто-нибудь подумает. Спасибо.

У меня есть следующая ссылка для refrence. This

Я использую этот код для вставки, но я не увеличиваю.

общественности давно insertCalSimpleNote (String NoteID, внутр идентификатор пользователя, String cal_date, String банкнота, String Участвуйте, String DeleteReason, String Create_Date, Строка Changed_date, Струнные emailInvolvers, внутр 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. put ("_ Id", 0) –

+0

Я УДАЛ ЭТО. Но den нет никакого значения insert.It вставить только "". –

+0

Можете ли вы поделиться своим кодом создания таблицы? просто SQl? –

ответ

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, будет автоинкремент bydeafult.

я украл его из 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

см. Мой отредактированный вопрос. –

1

Там нет autoincrement ключевого слова в SQLite, поэтому вы получаете сообщение об ошибке.

Столбец, объявленный INTEGER PRIMARY KEY будет автоинкремент.

Если вы объявляете столбец таблицы INTEGER PRIMARY KEY, то всякий раз, когда вы вставляете NULL в этот столбец таблицы, NULL автоматически преобразуется в целое число, которое является одним большим, чем наибольшее значение этого столбца над всеми другие строки в таблице или 1, если таблица пуста. Например:

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

здесь column1 является автоматическим приращением.

+0

см. Мой отредактированный вопрос. –

+0

Один способ вы можете попробовать только для проверки.Вставьте первую строку, явно указывающую идентификатор строки, с которой вы хотите начать. Затем SQLite вставляет идентификаторы строк, которые выше предыдущего. –

+0

ok дайте мне попробовать. –

0

В SQLite нет опции автоинкремента.

Вы можете:

1) создать столбец типа INTEGER PRIMARY KEY (он будет автоматически увеличиваться) 2) создать столбец с именем ROWID и жить нуль на вставках. 3) создавать свои собственные и реализовать опцию автоинкрементного через код (не рекомендуется)

+0

см. Мой отредактированный вопрос. –

Смежные вопросы