Есть 2 таблицы:
CREATE TABLE recruiter (
nickname TEXT PRIMARY KEY NOT NULL,
url_account TEXT NOT NULL,
UNIQUE (nickname)
);
CREATE TABLE proposal (
header TEXT NOT NULL,
url_proposal TEXT NOT NULL,
time_addition TIMESTAMP NOT NULL,
nickname TEXT NOT NULL,
UNIQUE (url_proposal, header),
FOREIGN KEY (nickname) REFERENCES recruiter (nickname)
);
И есть запрос:
SELECT p.nickname,
p.header,
p.url_proposal,
p.time_addition,
r.url_account
FROM proposal AS p
LEFT OUTER JOIN
recruiter AS r ON p.nickname = r.nickname
WHERE p.nickname = (?)
И через терминал он отлично работает но когда я пытаюсь отправить его через JDBC Driver:
private Proposal getProposalByHeader(final String header) {
final Proposal proposal = new Proposal();
try (PreparedStatement statement = connection.prepareStatement(
"SELECT p.nickname, p.url_proposal, p.time_addition, r.url_account" +
" FROM proposal AS p LEFT JOIN recruiter AS r ON p.nickname" +
" = r.nickname WHERE p.nickname = (?)")) {
statement.setString(1, header);
final ResultSet resultSet = statement.executeQuery();
System.out.println(resultSet.next()); // false
proposal.setNickname(resultSet.getString(1));
proposal.setUlrPropose(resultSet.getString(2));
proposal.setCreate(resultSet.getTimestamp(3));
proposal.setUrlRecruiter(resultSet.getString(4));
proposal.setHeader(header);
return proposal;
} catch (SQLException e) {
e.printStackTrace();
}
return proposal;
}
Он падает с ошибкой:
org.postgresql.util.PSQLException: ResultSet not positioned properly, perhaps you need to call next.
Метод next() сразу возвращает false.
И стоит мне только заменить запрос на SELECT * FROM proposal WHERE header = (?)
И написать так:
private Proposal getProposalByHeader(final String header) {
final Proposal proposal = new Proposal();
try (PreparedStatement statement = connection.prepareStatement(
"SELECT * FROM proposal WHERE header = (?)")) {
statement.setString(1, header);
final ResultSet resultSet = statement.executeQuery();
System.out.println(resultSet.next()); // true !!!!!!!
proposal.setNickname(resultSet.getString(4));
proposal.setCreate(resultSet.getTimestamp(3));
proposal.setUlrPropose(resultSet.getString(2));
proposal.setHeader(header);
return proposal;
} catch (SQLException e) {
e.printStackTrace();
}
return proposal;
}
И все работает.
Как такое может быть что один и тот же не сложный запрос работая в терминале, через JDBC Driver тут же работать отказывается?
Подскажите пожалуйста что я делаю не так, и как мне это починить?
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости