【发布时间】:2019-12-13 13:53:11
【问题描述】:
我正在尝试让 SQLite 使用 CURRENT_TIMESTAMP 创建自动时间戳。
我冒昧地使用了谷歌的code:
// roomVersion = '2.2.2'
@Entity
public class Playlist {
@PrimaryKey(autoGenerate = true)
long playlistId;
String name;
@Nullable
String description;
@ColumnInfo(defaultValue = "normal")
String category;
@ColumnInfo(defaultValue = "CURRENT_TIMESTAMP")
String createdTime;
@ColumnInfo(defaultValue = "CURRENT_TIMESTAMP")
String lastModifiedTime;
}
@Dao
interface PlaylistDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(playlist: Playlist): Long
}
这转化为 SQLite 语句:
CREATE TABLE `Playlist` (
`playlistId` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` TEXT,
`description` TEXT,
`category` TEXT DEFAULT 'normal',
`createdTime` TEXT DEFAULT CURRENT_TIMESTAMP,
`lastModifiedTime` TEXT DEFAULT CURRENT_TIMESTAMP
)
我确实做了一个插入:
mDb.playListDao().insert(Playlist().apply { name = "Test 1" })
但时间戳始终为 Null。
使用 SQLite 的 DB 浏览器,我添加了另一个条目,在这里我得到了时间戳。
如何在房间中插入没有 Null-Timestamp 的内容?
(信息:createdTime 也始终与 lastModifiedTime 相同。我认为这必须通过 SQLite 中的触发器来完成,但这是一个不同的问题,此处不予讨论)。
【问题讨论】:
-
可能您的 DAO 代码明确传递了
NULL而不是跳过列或传递DEFAULT -
列
NOT NULL? -
完整代码如上。我没有明确设置值,但对象会。但我需要对象中的字段来创建房间样式的表格。所以:如何不设置Null(“”也一样)。
标签: sqlite android-room