java - 如何将时间戳插入 SQLite 数据库列?使用函数时间 ('now' )?

标签 java android database sqlite datetime

我正在开发一个 android 应用程序,我正在创建一个名为 HealthDev.db 的数据库,该数据库有一个名为 rawData 的表,该表有 4 列: _id、foreignUserId、数据、时间戳

我在 bash shell 中使用了 sqlite3 程序,并发现我可以拥有一个带有以下列架构参数的时间戳列: timeStamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP

所以当我创建我使用的表时: create table rawData(_id integer 主键 autoincrement, foreignUserId integer, data real, timeStamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

这在 bash 中运行良好。

然后我在 sqlite3 中练习并知道当插入到 timeStamp 列并使用函数 time('now') 作为值来存储它实际上以 HH:MM:SS 形式存储时间戳在 Universal Coordinated时间。

所以现在将它翻译成 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 View 模式下从文件资源管理器中为 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。

我的主要问题是是否可以对其进行编码,使其能够识别 time('now') 函数?

最佳答案

由于该列的默认值为 CURRENT_TIMESTAMP,如果您完全省略这一行会怎样:

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

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

关于java - 如何将时间戳插入 SQLite 数据库列?使用函数时间 ('now' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16864128/

相关文章:

java - 通过 edittext 将项目添加到 ListView

android - 设置为 ViewPager 时 ViewPagerAdapter 构造函数中的行为是什么

java - Retrift API 中的 JSON 格式错误?

java - 在一次调用中执行多个 SQL 语句

mysql - 如何通过拆分列字符串来对列执行排序?

php - 这不是 phpMyAdmin 中的数字错误

java - 如何使用 JUnit 5 以自定义对象作为返回类型对静态方法进行单元测试

java - java 中的 unsigned long,使用 BigInteger 进行算术运算,但 BigInteger.toByteArray 返回 14 个字节而不是 8 个字节

java - 如何在使用 RMI 时共享输入流或输出流?

java - 使用 FirestorePagingAdapter 的 SnapshotParser