Одна строка результата выборки
Не каждый SELECT возвращает много строк.
Иногда нужна одна запись или проверка, что совпадений
нет. Курсор всё равно двигают через next.
Если next вернул true, текущая строка
единственная в простом сценарии с уникальным ключом:
import java.sql.DriverManager
fun main() {
DriverManager.getConnection("jdbc:sqlite:single_hit.db")
.use { connection ->
connection.createStatement().use { statement ->
statement.execute(
"""
CREATE TABLE IF NOT EXISTS tokens (
id INTEGER PRIMARY KEY,
secret TEXT NOT NULL
)
"""
)
statement.executeUpdate(
"INSERT INTO tokens (secret) VALUES ('x-ray')"
)
}
val query = connection.prepareStatement(
"SELECT secret FROM tokens WHERE id = ?"
)
query.setInt(1, 1)
val result = query.executeQuery()
if (result.next()) {
println(result.getString("secret"))
}
}
}
Когда условие никому не подошло, первый же next
даёт false. Это нормальный пустой результат,
а не ошибка протокола:
import java.sql.DriverManager
fun main() {
DriverManager.getConnection("jdbc:sqlite:single_hit.db")
.use { connection ->
val query = connection.prepareStatement(
"SELECT secret FROM tokens WHERE id = ?"
)
query.setInt(1, 99)
val result = query.executeQuery()
if (result.next()) {
println(result.getString("secret"))
} else {
println("empty")
}
}
}
Создайте таблицу passes в gate.db,
вставьте пропуск "vip-1" и выведите его,
если выборка по id 1 нашла строку.
Запросите id 100 и выведите
"none", когда next не нашёл
запись.