我正在一个
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仿真器中运行此代码之后,然后从DDOS视图模式下的文件浏览器中提取数据库文件,用于eclipse的android项目.然后我在bash shell中打开数据库,然后从表rawData中选择所有列,以在shell上显示它.我注意到时间(‘now’)被视为字符串而不是函数.为了证明时间(‘now’)功能的工作,我手动插入一个新行使用time(‘now’)为timeStamp值.然后重新选择所有列再次显示.它成功打印出时间戳为HH:MM:SS.
我认为环境可能会有所不同? bash shell识别函数时间(‘now’),这是用c右键写的,因为我在bash中有sqlite3程序?然而在eclipse当我使用SQL数据库并使用插入它将时间(‘now’)视为一个字符串.请记住,我正在Windows 7操作系统中工作.我正在从作为主机的学校的客户端(SSH Secure Shell)访问bash.
我的主要问题是可以编码它,以便它识别时间(‘now’)功能?