如何将时间戳插入SQLite数据库列?使用功能时间('现在')?

时间:2013-05-31 19:03:34

标签: java android database sqlite datetime

我正在开发一个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在Universal Coordinated中时间。

所以现在将其转换为java for android app,我使用下面的代码。这样,当调用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识别函数时间('now'),这是用c写的吗?因为我在bash中有sqlite3程序?然而在eclipse中,当我使用SQL数据库并使用插入时,它将时间('now')视为字符串。请记住,我在Windows 7操作系统中工作。我作为客户端(SSH Secure Shell)从我的学校(主机)访问bash。

我的主要问题是可以对它进行编码,以便识别时间('现在')函数吗?

1 个答案:

答案 0 :(得分:21)

由于该列的默认值为CURRENT_TIMESTAMP,如果您完全忽略该行,该怎么办:

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

它现在默认将当前时间戳插入该列?