You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Exposed DAO中使用NOW()函数设置timestamp字段实现数据插入

解决方案

要实现让数据库自动插入当前时间(对应SQL里的NOW()),在Exposed框架里有两种简洁的方式,看你更倾向哪种:

方法1:给表字段设置默认值(推荐,一劳永逸)

直接修改你的表定义,给created_date字段加上数据库层面的默认值,这样每次插入数据时如果不指定该字段,数据库会自动填充当前时间:

object AsdTable : IntIdTable("asd") {
    val created_date = timestamp("created_date").default(CurrentDateTime)
    val code = varchar("code", 64)
}

对应的插入代码就可以简化成(不用手动设置createdDate):

transaction {
    AsdEntity.new {
        code = "oook"
    }
}

当然如果你想显式指定用当前时间,也可以在new块里写上createdDate = CurrentDateTime,效果是一样的。

方法2:插入时显式指定当前时间表达式

如果不想修改表结构,直接在插入代码里使用Exposed提供的CurrentDateTime表达式,它会自动转换成对应数据库的NOW()(或CURRENT_TIMESTAMP等适配函数):

transaction {
    AsdEntity.new {
        createdDate = CurrentDateTime
        code = "oook"
    }
}

为什么用CurrentDateTime而不是手动生成时间?

CurrentDateTime是Exposed的内置数据库表达式,它会让数据库层面生成当前时间,比你在Kotlin代码里用LocalDateTime.now()更准确(避免应用服务器和数据库服务器的时间差),同时还能自动适配不同数据库的语法,不用操心MySQL、PostgreSQL等的函数差异。

内容的提问来源于stack exchange,提问作者Alex Bashkatov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:56:14