如何将时间戳插入SQLite数据库列?使用函数时间(“现在”)?
我正在开发一个Android应用程序,我正在创建一个名为HealthDev的数据库.db该数据库有一个名为rawData的表,其中包含4列:_id,foreignUserId,data,timeStamp
我已经在bash shell中使用了sqlite3程序,并发现我可以有一个具有以下列模式参数的时间戳列:timeStamp Timestamp DEFAULT CURRENT_TIMESTAMP
所以当我创建我使用的表时:创建表 rawData(_id 整数主键自动增量,foreignUserId 整数,数据实数,时间戳时间戳默认CURRENT_TIMESTAMP);
这在 bash 中工作正常。
然后我在sqlite3中练习,并且知道当插入到timeStamp列并使用函数time('now')作为存储值时,它实际上以HH:MM:SS的形式存储了一个时间戳,即通用协调时间。
因此,现在将其转换为Android应用程序的java,我使用了下面的代码。这样,当调用 onCreate 时,表会自动生成大约 20 行。这只是为了测试我是否在java中正确传递时间('now')。
// 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 shell 中打开数据库,然后从表 rawData 中选择所有列以在 shell 上显示它。我注意到时间('now')被视为字符串而不是函数。为了证明time('now')函数有效,我手动插入了一个新行,使用time('now')作为timeStamp值。然后重新选择所有列以再次显示它们。它成功地将时间戳打印为HH:MM:SS。
我在想环境可能会有所不同?bash shell 识别函数 time('now'),它是用 c 编写的对吧?,因为我在 bash 中有 sqlite3 程序?然而,在 eclipse 中,当我使用 SQL 数据库并使用插入时,它会将 time('now') 视为字符串。请记住,我在Windows 7操作系统中工作。我正在从我的学校(主机)作为客户端(SSH Secure Shell)访问bash。
我的主要问题是可以对其进行编码,以便它识别time('now')函数?