Условие в SQL-выборке
Ключевое слово WHERE оставляет только строки,
где предикат истинен. Значение из Java безопаснее
передавать через "?", а не вшивать в текст.
Подготовленный SELECT с одним параметром
ищет записи по совпадению поля:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class Main {
public static void main(String[] args) throws Exception {
try (Connection connection = DriverManager.getConnection("jdbc:sqlite:filter_demo.db")) {
try (Statement statement = connection.createStatement()) {
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')"
);
}
PreparedStatement query = connection.prepareStatement(
"SELECT name FROM tags WHERE group_code = ?"
);
query.setString(1, "g1");
var result = query.executeQuery(); while (result.next()) {
System.out.println(result.getString("name"));
}
}
}
}
}
Смена аргумента меняет набор строк без нового SQL.
Числовые поля сравнивают через setInt
и операторы вроде >=:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class Main {
public static void main(String[] args) throws Exception {
try (Connection connection = DriverManager.getConnection("jdbc:sqlite:filter_demo.db")) {
PreparedStatement query = connection.prepareStatement(
"""
SELECT name FROM tags
WHERE group_code = ? AND id >= ?
"""
);
query.setString(1, "g2");
query.setInt(2, 1);
var result = query.executeQuery(); while (result.next()) {
System.out.println(result.getString("name"));
}
}
}
}
}
Создайте таблицу shifts в plant.db
с полями worker, shift_code
и hours, добавьте три строки и выведите
имена, где hours не меньше 8.
Выведите имена смен с кодом смены "night".