[英]How do I set View ids when accessing children of View when using ViewBinding instead of Kotlin Synthetics?
[英]How do I use a specific set of words when specifying types for columns in SQLite, using Kotlin?
我正在制作一個數據庫,我希望其中一個字段是“經典”或“當前”。 如何創建一個包含僅指定其中兩個列的表?
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'))"
}
請注意,AUTOINCREMENT 關鍵字已被刪除,需要它的可能性很小,而且效率低下
AUTOINCREMENT 關鍵字會增加額外的 CPU、內存、磁盤空間和磁盤 I/O 開銷,如果不是絕對需要,應該避免使用。 通常不需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.