13

我正在尝试创建一个名为 rawData 的数据库。db 将有一个用于 id 的列、一个外部用户 id(来自另一个表的 _id)、数据以及最后一个时间戳。

我的问题是如何在 SQlite 中创建时间戳并将其存储在数据库中,该列应该是什么类型,文本?数据库需要能够每秒存储 150 个浮点值并为这 150 个条目中的每一个提供时间戳。此外,由于 SQlite 没有浮点类型,我应该使用 real 作为列类型吗?

public class RawDatabase{
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
    + " text not null);";
}
4

2 回答 2

31

文档说:

SQLite 没有为存储日期和/或时间预留存储类。相反,SQLite 的内置日期和时间函数能够将日期和时间存储为 TEXT、REAL 或 INTEGER 值:

  • TEXT作为 ISO8601 字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  • REAL作为儒略日数字,根据预测的公历,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。
  • INTEGER作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。

应用程序可以选择以任何这些格式存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换。

如果您只需要秒精度,请使用 Unix 时间格式的整数。否则,对小数秒使用浮点数。

于 2013-05-16T20:59:26.797 回答
-1

这是在 Java 中使用 SQlite 和 Date 的 DAO 运行示例:

首先在您的 TABLE 中创建列 MY_DATE TIMESTAMP 并像这样填充:

PreparedStatement st = connection.prepareStatement("INSERT INTO ......");
st.setDate(1, new java.sql.Date(lettura.getData().getTime()));

并首先检索数据,我以字符串类型获取日期:

String dateStr = rs.getString(1);
Date myDate = new java.util.Date(Long.parseLong(dateStr));
于 2018-04-28T08:52:42.807 回答