如何将时间戳插入 SQLite 数据库列?使用函数时间('现在')?
Posted
技术标签:
【中文标题】如何将时间戳插入 SQLite 数据库列?使用函数时间(\'现在\')?【英文标题】:How to insert time stamp into an SQLite database column? Using the function time('now')?如何将时间戳插入 SQLite 数据库列?使用函数时间('现在')? 【发布时间】:2013-05-27 16:17:41 【问题描述】:我正在开发一个 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 视图模式下从文件资源管理器中为 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') 函数?
【问题讨论】:
【参考方案1】:由于该列的默认值为 CURRENT_TIMESTAMP,如果您完全忽略这一行会怎样:
contentValues.put( COLUMN_TIME_STAMP, " time('now') " );
现在不会默认将当前时间戳插入该列吗?
【讨论】:
当然!你能投票给我的问题作为回报吗?我想在我最初的帖子中上传一张照片,但我不能,因为我没有足够的声誉。第一次在***中提问。谢谢! 遗憾的是这个问题的标题和答案并不匹配。以上是关于如何将时间戳插入 SQLite 数据库列?使用函数时间('现在')?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 clojure.java.jdbc 插入包含时间戳值的行?
如何使用 PHP 插入查询将当前时间戳插入 MySQL 数据库