Условие в SQL-выборке
Ключевое слово WHERE оставляет только строки,
где предикат истинен. Значение из Kotlin безопаснее
передавать через "?", а не вшивать в текст.
Подготовленный SELECT с одним параметром
ищет записи по совпадению поля:
import java.sql.DriverManager
fun main() {
DriverManager.getConnection("jdbc:sqlite:filter_demo.db")
.use { connection ->
connection.createStatement().use { statement ->
statement.execute(
"""
CREATE TABLE IF NOT EXISTS tags (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
group_code TEXT NOT NULL
)
"""
)
statement.executeUpdate(
"INSERT INTO tags (name, group_code) VALUES ('alpha', 'g1')"
)
statement.executeUpdate(
"INSERT INTO tags (name, group_code) VALUES ('beta', 'g2')"
)
}
val query = connection.prepareStatement(
"SELECT name FROM tags WHERE group_code = ?"
)
query.setString(1, "g1")
val result = query.executeQuery()
while (result.next()) {
println(result.getString("name"))
}
}
}
Смена аргумента меняет набор строк без нового SQL.
Числовые поля сравнивают через setInt
и операторы вроде >=:
import java.sql.DriverManager
fun main() {
DriverManager.getConnection("jdbc:sqlite:filter_demo.db")
.use { connection ->
val query = connection.prepareStatement(
"""
SELECT name FROM tags
WHERE group_code = ? AND id >= ?
"""
)
query.setString(1, "g2")
query.setInt(2, 1)
val result = query.executeQuery()
while (result.next()) {
println(result.getString("name"))
}
}
}
Создайте таблицу shifts в plant.db
с полями worker, shift_code
и hours, добавьте три строки и выведите
имена, где hours не меньше 8.
Выведите имена смен с кодом смены "night",
используя параметр в условии по полю
shift_code.