如何在会议室SQLite数据库中自动设置时间戳?

冈纳·伯恩斯坦

我试图让SQLite使用CURRENT_TIMESTAMP创建自动时间戳。

我随意使用Google的代码

// 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的数据库浏览器,我添加了另一个条目,在这里获得了时间戳。

如何在没有Null-Timestamp的情况下插入?

(信息:createdTime也总是与lastModifiedTime相同。我认为这必须使用SQLite中的触发器来完成,但这是一个不同的问题,在此不再讨论。)

屏幕快照播放列表数据库条目

迈克

您不需要使用其他类,可以将它@Query用作便捷的替代方法@Insert

按照 :-

查询方法支持4种类型的语句:SELECT,INSERT,UPDATE和DELETE。询问

例如

@Query("INSERT INTO test_table001 (name) VALUES(:name) ")
void insert(String name);

您也不仅限于CURRENT_TIMESTAMP作为获取当前时间戳的唯一方法,您可以使用嵌入式datetime函数(如下所示),该函数可以更有效地存储值,并且更加灵活,例如,您可以使用修饰符来调整当前时间例如“ +7天”

如果您考虑以下内容:

@Entity(tableName = "test_table001")
public class TestTable001 {

    @PrimaryKey
    Long id;
    @ColumnInfo(defaultValue = "CURRENT_TIMESTAMP")
    String dt1;
    @ColumnInfo(defaultValue = "(datetime('now'))")
    String dt2;
    @ColumnInfo(defaultValue = "(strftime('%s','now'))")
    String dt3;
    String name;
}
  • 请注意,autogenerate = true尚未使用效率低下的BUT,如下所示,您仍然可以为SQLite分配ID (请注意,您必须使用Long / Integer类型,而不是long或int类型)
  • 还要注意获取当前日期时间的另一种方法(后者效率更高,因为该值最终将被存储为Integer(最多8个字节),而不是更多的字节饥饿的String)。

以道为:-

@Dao
public interface TestTable001Dao {

    @Insert()
    long insert(TestTable001 testTable001);

    @Query("INSERT INTO test_table001 (name) VALUES(:name) ")
    long insert(String name);

    @Query("SELECT * FROM test_table001")
    List<TestTable001> getAllTestTable001();
}

并进行以下测试/演示:

public class MainActivity extends AppCompatActivity {

    AppDatabase mRoomDB;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRoomDB = Room.databaseBuilder(this,AppDatabase.class,"testdb")
                .allowMainThreadQueries()
                .build();

        TestTable001 tt01 = new TestTable001();
        tt01.setName("tt01");
        mRoomDB.useTestTable001().insert(tt01);
        mRoomDB.useTestTable001().insert("tt02");

        logAllTestTable001();
    }

    private void logAllTestTable001() {
        for (TestTable001 tt: mRoomDB.useTestTable001().getAllTestTable001()) {
            Log.d(
                    "TTINFO",
                    "ID = " + tt.getId() +
                            " Name = " + tt.getName() +
                            " Date1 = " + tt.getDt1() +
                            " Date2 = " + tt.getDt2() +
                            " Date3 = " + tt.getDt3());
        }
    }
}

其结果是:-

2019-12-14 03:18:32.569 D/TTINFO: ID = 1 Name = tt01 Date1 = null Date2 = null Date3 = null
2019-12-14 03:18:32.569 D/TTINFO: ID = 2 Name = tt02 Date1 = 2019-12-13 16:18:32 Date2 = 2019-12-13 16:18:32 Date3 = 1576253912

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Android的会议室数据库中更改LiveData可观察的查询参数?

来自分类Dev

使用改造从服务器获取数据后如何在会议室数据库中存储数据

来自分类Dev

在@ FTS4会议室数据库中设置唯一索引会导致生成错误

来自分类Dev

包含对象内部列表的会议室数据库

来自分类Dev

如何从不同的枚举类型迁移会议室数据库

来自分类Dev

如何获得会议室数据库的版本号?

来自分类Dev

从版本A迁移到版本B时如何填充会议室数据库

来自分类Dev

如何将编辑文本与会议室数据库文本进行比较

来自分类Dev

将多个嵌套列表保存到会议室数据库中

来自分类Dev

无法更新会议室数据库中的对象

来自分类Dev

会议室数据库查询返回null,在Kotlin中应该为null安全

来自分类Dev

会议室数据库预打包的数据库具有无效的架构

来自分类Dev

Android Studio- Java RecyclerView显示的视图(所有者)多于会议室数据库中的行数

来自分类Dev

会议室数据库提供的“刷新”实时数据的最佳方法

来自分类Dev

如何在mysql数据库中更新时间戳?

来自分类Dev

会议室数据库加载聊天室时获取最后的聊天室消息

来自分类Dev

列类型为布尔值的会议室数据库迁移问题

来自分类Dev

我应该何时建立会议室数据库实例?

来自分类Dev

使用RxJava将列表插入会议室数据库

来自分类Dev

由于找不到列,导致会议室数据库崩溃

来自分类Dev

会议室数据库实例无法解析DAO方法的符号

来自分类Dev

尝试使用会议室数据库时出现NullPointerException

来自分类Dev

会议室数据库查询,给出包含排除项的列表

来自分类Dev

如何解析数据或正确使用会议室数据?

来自分类Dev

如何在quarkus框架中设置sqlite数据库

来自分类Dev

如何在sqlite数据库中设置字段?

来自分类Dev

成功设计会议室数据库架构后,如何获取网络响应中另一个记录的一部分的记录列表

来自分类Dev

Android:有人知道Android的会议室数据库是否经过凭据加密吗?

来自分类Dev

会议室数据库:创建新的RecyclerView项后两次获得SELECT MAX()

Related 相关文章

  1. 1

    如何在Android的会议室数据库中更改LiveData可观察的查询参数?

  2. 2

    使用改造从服务器获取数据后如何在会议室数据库中存储数据

  3. 3

    在@ FTS4会议室数据库中设置唯一索引会导致生成错误

  4. 4

    包含对象内部列表的会议室数据库

  5. 5

    如何从不同的枚举类型迁移会议室数据库

  6. 6

    如何获得会议室数据库的版本号?

  7. 7

    从版本A迁移到版本B时如何填充会议室数据库

  8. 8

    如何将编辑文本与会议室数据库文本进行比较

  9. 9

    将多个嵌套列表保存到会议室数据库中

  10. 10

    无法更新会议室数据库中的对象

  11. 11

    会议室数据库查询返回null,在Kotlin中应该为null安全

  12. 12

    会议室数据库预打包的数据库具有无效的架构

  13. 13

    Android Studio- Java RecyclerView显示的视图(所有者)多于会议室数据库中的行数

  14. 14

    会议室数据库提供的“刷新”实时数据的最佳方法

  15. 15

    如何在mysql数据库中更新时间戳?

  16. 16

    会议室数据库加载聊天室时获取最后的聊天室消息

  17. 17

    列类型为布尔值的会议室数据库迁移问题

  18. 18

    我应该何时建立会议室数据库实例?

  19. 19

    使用RxJava将列表插入会议室数据库

  20. 20

    由于找不到列,导致会议室数据库崩溃

  21. 21

    会议室数据库实例无法解析DAO方法的符号

  22. 22

    尝试使用会议室数据库时出现NullPointerException

  23. 23

    会议室数据库查询,给出包含排除项的列表

  24. 24

    如何解析数据或正确使用会议室数据?

  25. 25

    如何在quarkus框架中设置sqlite数据库

  26. 26

    如何在sqlite数据库中设置字段?

  27. 27

    成功设计会议室数据库架构后,如何获取网络响应中另一个记录的一部分的记录列表

  28. 28

    Android:有人知道Android的会议室数据库是否经过凭据加密吗?

  29. 29

    会议室数据库:创建新的RecyclerView项后两次获得SELECT MAX()

热门标签

归档