我正在开发一个 android 应用程序,我正在创建一个名为 HealthDev.db 的数据库,该数据库有一个名为 rawData 的表,该表有 4 列:_id、foreignUserId、data、timeStamp
我在 bash shell 中使用了 sqlite3 程序,并发现我可以有一个带有以下列模式参数的时间戳列:timeStamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
所以当我创建我使用的表时: create table rawData(_id integer primary key autoincrement, foreignUserId integer, data real, timeStamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
这在 bash 中运行良好。
然后我在 sqlite3 中练习并知道当插入到 timeStamp 列并使用函数 time('now') 作为值来存储它时,它实际上以 HH:MM:SS 的形式在通用协调时间中存储了一个时间戳。
所以现在将它翻译成 java 用于 android 应用程序,我使用下面的代码。这样,当调用 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 上显示它。我注意到 time('now') 被视为字符串而不是函数。为了证明 time('now') 函数有效,我使用 time('now') 手动插入了一个新行作为 timeStamp 值。然后重新选择所有列以再次显示它们。它成功地将时间戳打印为 HH:MM:SS。
我在想环境可能会有所不同?bash shell 可以识别函数 time('now'),它是用 c 编写的,对吧?因为我在 bash 中有 sqlite3 程序?然而,在 Eclipse 中,当我使用 SQL 数据库并使用插入时,它会将时间('now')视为字符串。请记住,我正在使用 Windows 7 操作系统。我从作为主机的学校作为客户端(SSH Secure Shell)访问 bash。
我的主要问题是可以对其进行编码,以便它识别时间('现在')函数吗?