Подтвердить что ты не робот

Как вставить метку времени в столбец базы данных SQLite? Используя время функции ('now')?

Я работаю над Android-приложением, и я создаю базу данных под названием HealthDev.db, которая имеет таблицу rawData, которая имеет 4 столбца: _id, foreignUserId, data, timeStamp

Я работал с программой sqlite3 в оболочке bash и выяснил, что у меня может быть столбец временной отметки со следующим параметром схемы столбца: timeStamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP

поэтому, когда я создал таблицу, которую я использовал: create table rawData (_int integer первичный ключ автоинкремент, foreignUserId целое число, данные real, timeStamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

Это отлично работало в bash.

Затем я практиковал в sqlite3 и знаю, что при вставке в столбец timeStamp и использовании времени функции ('now') в качестве значения для его сохранения на самом деле хранится метка времени в форме HH: MM: SS в Universal Coordinated Время.

Итак, теперь, переведя в java приложение для Android, я использовал следующий код ниже. Таким образом, таблица автоматически генерирует около 20 строк при вызове onCreate. Это просто для тестирования, если я правильно передаю время ( "сейчас" ) в java.

        // Below are variables to the database table name and the 
// database column names.
public static final String TABLE_RAW_DATA = "rawData";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_FOREIGN_USER_ID = "foreignUserId";
public static final String COLUMN_DATA = "data";
    public static final String COLUMN_TIME_STAMP = "timeStamp";

// Database creation sql statement.
private static final String DATABASE_CREATE = "create table "
    + TABLE_RAW_DATA 
    + "(" 
    + COLUMN_ID + " integer primary key autoincrement, " 
    + COLUMN_FOREIGN_USER_ID + " integer, " 
    + COLUMN_DATA + " real, " 
    + COLUMN_TIME_STAMP + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP"
    + ");";

// initializes the columns of the database given by passing the DATABASE_CREATE
// sql statement to the incoming database.
public static void onCreate(SQLiteDatabase database) {
    database.execSQL(DATABASE_CREATE);
    // For testing

    ContentValues contentValues = new ContentValues();
    System.out.println("The database is open? " + database.isOpen());
    for (int i = 0; i < 20; i++)
    {
        contentValues.put( COLUMN_FOREIGN_USER_ID, 8976);
        contentValues.put( COLUMN_DATA, Math.random()*100 );
        contentValues.put( COLUMN_TIME_STAMP, " time('now') " );

        database.insert( TABLE_RAW_DATA, null, contentValues );

        //contentValues = new ContentValues();

    }

  }

После запуска этого кода в эмуляторе eclipse я вытащил файл базы данных из проводника файлов в режиме просмотра DDMS для проектов eclipse android. Затем я открыл базу данных в оболочке bash, а затем отобрал все столбцы из таблицы rawData, чтобы показать ее в оболочке. Я заметил, что время ('now') рассматривалось как строка, а не функция. Чтобы доказать, что функция time ('now') работает, я вручную вставил новую строку, используя time ('now') для значения timeStamp. Затем повторно выберите все столбцы, чтобы отобразить их снова. Он успешно напечатал временную метку как HH: MM: SS.

Я думаю, что может быть разница в окружающей среде? Оболочка bash распознает время функции ('now'), которое было написано в c справа?, потому что у меня есть программа sqlite3 в bash? Однако в eclipse, когда я использую базу данных SQL и использую вставку, она обрабатывает время ('now') как строку. Имейте в виду, что я работаю в Windows 7 os. Я обращаюсь к bash как к клиенту (SSH Secure Shell) из моей школы, которая является хостом.

Мой главный вопрос: можно ли закодировать его так, чтобы он распознавал функцию времени ('now')?

4b9b3361

Ответ 1

Так как значение по умолчанию для столбца CURRENT_TIMESTAMP, что если вы полностью исключаете эту строку:

contentValues.put( COLUMN_TIME_STAMP, " time('now') " );

Не будет ли теперь вставлять текущую временную метку в этот столбец по умолчанию?