Пустое значение поля SQL
Значение NULL в SQL означает отсутствие данных, а не
пустую строку. Колонку без NOT NULL можно
оставить незаполненной при INSERT.
Метод getString после SQL NULL даёт Kotlin
null. Дополнительно проверяют wasNull
сразу после чтения:
import java.sql.DriverManager
fun main() {
DriverManager.getConnection("jdbc:sqlite:nulls.db")
.use { connection ->
connection.createStatement().use { statement ->
statement.execute(
"""
CREATE TABLE IF NOT EXISTS memos (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
remark TEXT
)
"""
)
statement.executeUpdate(
"INSERT INTO memos (title) VALUES ('idea')"
)
val result = statement.executeQuery(
"SELECT remark FROM memos WHERE id = 1"
)
if (result.next()) {
val text = result.getString("remark")
if (result.wasNull()) {
println("missing")
} else {
println(text)
}
}
}
}
}
Тот же столбец можно прочитать через нуллабельный
результат getString без отдельной ветки,
если дальше работают только с Kotlin null:
import java.sql.DriverManager
fun main() {
DriverManager.getConnection("jdbc:sqlite:nulls.db")
.use { connection ->
val insert = connection.prepareStatement(
"INSERT INTO memos (title, remark) VALUES (?, ?)"
)
insert.setString(1, "done")
insert.setString(2, "shipped")
insert.executeUpdate()
val query = connection.prepareStatement(
"SELECT remark FROM memos WHERE title = ?"
)
query.setString(1, "idea")
val result = query.executeQuery()
if (result.next()) {
val remark: String? = result.getString("remark")
println(remark ?: "none")
}
}
}
Создайте таблицу items в stock.db
с обязательным sku и необязательным
comment, добавьте строку без комментария
и выведите "empty", если поле пустое.
Добавьте строку с комментарием "fragile"
и выведите текст для обеих записей через
оператор Elvis.