Как определить ненулевое поле для таблицы SQLite, когда я использую Anko в Kotlin? - PullRequest
0 голосов
/ 15 ноября 2018

Я надеюсь определить ненулевое поле для таблицы SQLite, когда я использую Anko в Kotlin.

Но 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
        )
    }

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Мы использовали эти строки кода, и это прекрасно работает, созданная таблица

private val dbName = THE_PATH +"JSANotes.db"
private val dbTable = "Notes"
private val colId = "Id"
private val colTitle = "Title"
private val colContent = "Content"
private val dbVersion = 1

private val CREATE_TABLE_SQL = "CREATE TABLE IF NOT EXISTS " + dbTable + " (" + colId + " INTEGER PRIMARY KEY," + colTitle + " TEXT, " + colContent + " TEXT NOT NULL);"
private var db: SQLiteDatabase? = null

init {
    val dbHelper = DatabaseHelper(context)
    db = dbHelper.writableDatabase
}

Этот сайт поможет с множеством вопросов SQLite LINK

Мы не используем NOT NULL, мы делаем это вместо NOT NULL

            if(edtContent.text.toString().equals("")){
            error("ENTER Content")
            edtContent.requestFocus()
            return@setOnClickListener
        }

Вы также можете проверить длину сообщения об ошибке, которое отображается в текстовом представлении в нижней части упражнения с этим кодом

        fun error(msg:String){
        object : CountDownTimer(4000, 1000) {
            override fun onTick(millisUntilFinished: Long) {
                tvError.visibility = View.VISIBLE
                tvError.setText(msg)
            }
            override fun onFinish() {
                tvError.visibility = View.INVISIBLE
                tvError.setText("")
            }
        }.start()
    }
0 голосов
/ 18 ноября 2018

Взглянув на 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
    )
}
...