Одна строка результата выборки
Не каждый SELECT возвращает много строк.
Иногда нужна одна запись или проверка, что совпадений
нет. Курсор всё равно двигают через next.
Если next вернул true, текущая строка
единственная в простом сценарии с уникальным ключом:
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:single_hit.db")) {
try (Statement statement = connection.createStatement()) {
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')"
);
}
PreparedStatement query = connection.prepareStatement(
"SELECT secret FROM tokens WHERE id = ?"
);
query.setInt(1, 1);
var result = query.executeQuery(); if (result.next()) {
System.out.println(result.getString("secret"));
}
}
}
}
}
Когда условие никому не подошло, первый же next
даёт false. Это нормальный пустой результат,
а не ошибка протокола:
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:single_hit.db")) {
PreparedStatement query = connection.prepareStatement(
"SELECT secret FROM tokens WHERE id = ?"
);
query.setInt(1, 99);
var result = query.executeQuery(); if (result.next()) {
System.out.println(result.getString("secret"));
} else {
System.out.println("empty");
}
}
}
}
}
Создайте таблицу passes в gate.db,
вставьте пропуск "vip-1" и выведите его,
если выборка по id 1 нашла строку.
Запросите id 100 и выведите
"none", когда next не нашёл
запись.