2012-05-25 2 views
2

Я работаю над фиктивным проектом андроида, чтобы повесить вещи. Следующая строка кода нарушает мое приложение для Android без каких-либо ошибок. Я использую Idea как IDE.Как правильно вставить значение datetime в SQLite под Android?

database.execSQL("Insert Into todos(uid, name, created_on, changed_on) values('6a7047ed-c2f9-407f-a774-1c02b0fe9caf', 'todo', DATETIME('NOW'), DATETIME('NOW'))"); 

Я уверен, что база данных содержит данные столбцов, и если я просто использовать:

database.execSQL("Insert Into todos(uid, name) values('6a7047ed-c2f9-407f-a774-1c02b0fe9caf', 'todo')"); 

приложение работает так, как надо.

Я попытался вставить даты, как это (based on answered question related to this matter):

'2012-05-25 16:52:00' 

или

date('now') 

Я получаю такую ​​же аварию, без ошибок или отладки журнала.

Что мне здесь не хватает?

Обновлено

В соответствии с просьбой, код, используемый для создания таблицы базы данных.

public static final String TABLE_TODOS = "todos"; 
    public static final String COLUMN_ID = "id"; 
    public static final String COLUMN_UID = "uid"; 
    public static final String COLUMN_NAME = "name"; 
    public static final String COLUMN_CHECKED = "checked"; 
    public static final String COLUMN_TO_DELETE = "must_delete"; 
    public static final String COLUMN_CHANGED_ON = "changed_on"; 

    public static final String COLUMN_CREATED = "created_on"; 

    private static final String DATABASE_CREATE = "create table " 
      + TABLE_TODOS + "(" 
      + COLUMN_ID + " integer primary key autoincrement, " 
      + COLUMN_UID + " varchar(50), " 
      + COLUMN_NAME + " text not null, " 
      + COLUMN_CHECKED + " integer default 0, " 
      + COLUMN_TO_DELETE + " integer default 0, " 
      + COLUMN_CHANGED_ON + " datetime " 
      + COLUMN_CREATED + " datetime " 
      +");"; 
+0

посмотреть на http://stackoverflow.com/questions/754684/how-to-insert-a-sqlite-record-with-a-datetime-set-to-now-in-android- applyatio –

+1

Как объявляются эти столбцы при создании базы данных? Наиболее вероятный ответ заключается в том, что вы нарушаете ограничение. – Barak

+0

@JohnBoker, я думаю, что я использую DATETIME в качестве строки с «при попрошайничестве и конце функции DATETIME», и я уже использую executeSQL вместо функции вставки Android. –

ответ

4

Ваша проблема: вы объявляете тип данных, который не существует в SQlite. Из документов:

"1,2 Дата и время DATATYPE

SQLite не имеет класс памяти, отведенных для хранения даты и/или времени Вместо встроенной функции даты и времени в SQLite способны. сохраняя даты и время как значения TEXT, REAL или INTEGER:

ТЕКСТ как строки ISO8601 («ГГГГ-ММ-ДД ЧЧ: ММ: SS.SSS»). РЕАЛЬНО, как число юлианских дней, количество дней с полудня в Гринвиче 24 ноября 4714 г. до н.э. согласно прорептическому григорианскому календарю. INTEGER as Unix Time, количество секунд с 1970-01-01 00:00:00 по UTC.

Приложения могут выбирать даты и время в любом из этих форматов и свободно конвертировать между форматами, используя встроенные функции даты и времени ».

Так измените свой тип данных в базе данных, заново создайте его и измените методы, чтобы вставлять/обновлять/извлекать данные из этих столбцов, чтобы соответствовать правильному типу данных, и все должно работать лучше для вас.

+0

SQLite и базы данных в целом не являются моей сильной стороной. Благодаря! –

+0

Как насчет временных меток, как в этом примере: http://androidcookbook.com/Recipe.seam?recipeId=413 –

3

Вам не хватает запятой перед столбцом created_on в инструкции создания таблицы.

+ COLUMN_CHANGED_ON + " datetime " 

должен быть

+ COLUMN_CHANGED_ON + " datetime, " 
2

По своей собственной документации SQLite, будет использовать правильный тип NUMERIC данных для записи DATETIMEhttp://www.sqlite.org/datatype3.html следуя правилам аффинного типа данных. См. Таблицу Affinity.

COLUMN_CHANGED_ON + " datetime " 

должен быть

COLUMN_CHANGED_ON + " NUMERIC, " 

Использование правильно сродства тип данных можно сравнить значения, например,

SELECT b < '40', b < '60', b < '600' FROM t1; 
Смежные вопросы