JDBC не видит таблицу в БД
Проблема в том, что вылетает следующая ошибка:
org.postgresql.util.PSQLException: ОШИБКА: ошибка синтаксиса (примерное положение: "users")
Когда я выполняю этот запрос с PgAdmin, никаких жалоб на запрос нет. Почему jdbc не может выполнить мой запрос?
Код запроса в PgAdmin:
SELECT name, username AS creator_name,
points_votes, points_names, voted_users
FROM votes_table
JOIN users ON votes_table.creator = users.id;
Код программы JavaFX
static public Vector<Vote> loadVotes() throws SQLException, ClassNotFoundException
{
Vector<Vote> result = new Vector<>();
Class.forName("org.postgresql.Driver");
try (Connection connection = DriverManager.getConnection(connectionUrl, Database.userName, Database.password))
{
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(
"SELECT name, username AS creator_name," +
"points_votes, points_names, voted_users" +
"FROM votes_table" +
"JOIN users ON votes_table.creator = users.id;" // Жалоба именно на эту строчку после слова JOIN
);
while (resultSet.next())
{
// Vote data
String name = resultSet.getString("name");
String creatorName = resultSet.getString("creator_name");
Vector<Integer> pointsVotes = new Vector<>(Arrays.asList((Integer[])resultSet.getArray("points_votes").getArray()));
Vector<String> pointsNames = new Vector<>(Arrays.asList((String[])resultSet.getArray("points_names").getArray()));
Vector<String> votedUsers = new Vector<>(Arrays.asList((String[])resultSet.getArray("voted_users").getArray()));
Vote vote = new Vote(name, creatorName, pointsVotes, pointsNames, votedUsers);
result.add(vote);
}
}
return result;
}
Ответы (1 шт):
Запрос, который отправляется через JDBC, является синтаксически некорректным и фактически выглядит так:
SELECT name, username AS creator_name,points_votes, points_names, voted_usersFROM votes_tableJOIN users ON votes_table.creator = users.id;
Если у вас используется версия Java 15 и выше, то можно использовать блоки текста или многострочные строковые литералы. реализованные в JEP 378 Text Blocks, которые начинаются и заканчиваются тройными кавычками """:
String sql = """
SELECT name, username AS creator_name,
points_votes, points_names, voted_users
FROM votes_table
JOIN users ON votes_table.creator = users.id;
""";
В более старых версиях следует помнить о пробелах/переносах строки, которые должны остаться в коде.
В принципе, в нормальных IDE типа Eclipse / IntelliJ IDEA при вставке многострочного запроса в Java код внутри пустой строки: String sql = "|"; (| показывает курсор в месте, куда копируется код Сtrl+V/Shift+Ins), получится приблизительно такая строка с символами \n:
String sql = "SELECT name, username AS creator_name,\n"
+ "points_votes, points_names, voted_users\n"
+ "FROM votes_table\n"
+ "JOIN users ON votes_table.creator = users.id;";