gpt4 book ai didi

android - 在使用 Kotlin 为 SQLite 中的列指定类型时,如何使用一组特定的词?

转载 作者:行者123 更新时间:2023-11-30 04:55:51 28 4
gpt4 key购买 nike

我正在制作一个数据库,我希望其中一个字段为“经典”或“当前”。如何创建一个包含仅指定其中两个列的表?

override fun onCreate(db: SQLiteDatabase?) {
val CREATE_SONGS_TABLE = ("CREATE TABLE $SONGS_TABLE_NAME (" +
"$COLUMN_SONGID INTEGER PRIMARY KEY AUTOINCREMENT," +
"$COLUMN_SONG_MODE TEXT CHECK ('Classic', 'Current'), +" +
"")
}

请忽略错误的括号和所有,我会在完成数据库后正确关闭它们。

最佳答案

我相信你想要:-

override fun onCreate(db: SQLiteDatabase?) {
val CREATE_SONGS_TABLE = ("CREATE TABLE $SONGS_TABLE_NAME (" +
"$COLUMN_SONGID INTEGER PRIMARY KEY," +
"$COLUMN_SONG_MODE TEXT CHECK ($COLUMN_SONG_MODE = 'Classic' OR $COLUMN_SONG_MODE ='Current'))"
}

但是,它只强制只提供两个值之一。它不会更改不正确的值。也就是说,CHECK 是一个约束(规则),如果被破坏就会导致约束冲突。尽管您可以使用 INSERT OR IGNORE ..... 并且冲突将被忽略并且不会插入该行。

您还可以使用略有不同但可能更符合逻辑的 :-

override fun onCreate(db: SQLiteDatabase?) {
val CREATE_SONGS_TABLE = ("CREATE TABLE $SONGS_TABLE_NAME (" +
"$COLUMN_SONGID INTEGER PRIMARY KEY," +
"$COLUMN_SONG_MODE TEXT, /*<<<<<<<< comma added*/ CHECK ($COLUMN_SONG_MODE = 'Classic' OR $COLUMN_SONG_MODE ='Current'))"
}
  • 这使得 CHECK 约束成为表级定义而不是列级。但是,最终结果并没有什么不同。
  • 表示添加逗号的注释仅用于表示细微的变化。它可以被删除。
  • 请注意,AUTOINCREMENT 关键字已被删除,需要它的可能性非常小,而且根据

    ,它效率低下
    • The AUTOINCREMENT keyword imposes extra CPU, memory, disk space, and disk I/O overhead and should be avoided if not strictly needed. It is usually not needed.

关于android - 在使用 Kotlin 为 SQLite 中的列指定类型时,如何使用一组特定的词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59185653/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com