Я работаю над 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')?