Ошибка при использовании ключевого слова автоинкремента в sqlite - PullRequest
1 голос
/ 02 января 2012

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

"java.lang.RuntimeException: невозможно запустить действие ComponentInfo {abc.tt/abc.tt.Home}: android.database.sqlite.SQLiteException: рядом с «автоинкрементом»: синтаксическая ошибка: создать таблицу calSimpleNote (_id целое число PRIMERY KEY, автоинкремент, Cal_Id TEXT, User_ID INTEGER, Cal_Date TEXT, примечание TEXT, включает TEXT, DeleteReason TEXT, Create_Date TEXT, Changed_DateTexTexTexTexTEXTT, TEXT, примечаниеINTEGER, RemindBeforeDays INTEGER); ".

Вот мой код для создания базы данных. Произошла ошибка при создании базы данных.Помоги мне, если у кого-нибудь есть идеи.Спасибо.

Я использовал следующую ссылку для ссылки. Этот

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

publiclong 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) {

* 1018

Ответы [ 4 ]

2 голосов
/ 02 января 2012

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

Я украл его у здесь :

Краткий ответ: столбец, объявленный 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 голос
/ 02 января 2012

Попробуйте это:

//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);
}
1 голос
/ 02 января 2012

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

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

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

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

здесь column1 - автоинкремент.

0 голосов
/ 02 января 2012

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

Вы можете:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...