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 шт):

Автор решения: Nowhere Man

Запрос, который отправляется через 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;";
→ Ссылка