android - 在 Kotlin 中使用 Anko 时如何为 SQLite 表定义非空字段?
问题描述
我希望在 Kotlin 中使用 Anko 时为 SQLite 的表定义一个非空字段。
但是DBRecordTable.Category to TEXT NOT NULL
错了,我该如何解决?
代码
implementation "org.jetbrains.anko:anko-sqlite:$anko_version"
override fun onCreate(db: SQLiteDatabase) {
db.createTable( DBRecordTable.TableNAME , true,
DBRecordTable._ID to INTEGER + PRIMARY_KEY+ AUTOINCREMENT,
DBRecordTable.Category to TEXT NOT NULL, //It's wrong
DBRecordTable.Content to TEXT,
DBRecordTable.IsFavorite to INTEGER +DEFAULT("0"),
DBRecordTable.IsProtected to INTEGER +DEFAULT("0"),
DBRecordTable.CreatedDate to INTEGER
)
}
解决方案
通过查看sqlTypes.kt
我们可以发现not null
约束定义如下:
val NOT_NULL: SqlTypeModifier = SqlTypeModifierImpl("NOT NULL")
所以你的代码应该是:
override fun onCreate(db: SQLiteDatabase) {
db.createTable( DBRecordTable.TableNAME , true,
DBRecordTable._ID to INTEGER + PRIMARY_KEY + AUTOINCREMENT,
DBRecordTable.Category to TEXT + NOT_NULL,
DBRecordTable.Content to TEXT,
DBRecordTable.IsFavorite to INTEGER + DEFAULT("0"),
DBRecordTable.IsProtected to INTEGER + DEFAULT("0"),
DBRecordTable.CreatedDate to INTEGER
)
}
推荐阅读
- c# - C# FtpWebRequest 失败,成功时抛出异常
- dpdk - pkt-gen dpdk 不发送任何数据包问题
- java - 警告消息:不推荐在文档索引请求中指定类型
- python - 检测器 2 输出的类标签指的是什么?
- javascript - Docker-Compose : 来自具有相同 Dockerfile 的本地图像的多个服务
- django-models - 如何为同一个项目选择多个人
- flutter - FireStore 读取失败,我不知道为什么
- r - 将函数结果插入表中
- angular - Jenkins 管道无法识别我的 Angular 项目
- python - 在 zip 文件中使用 pandas 提交作业