Как исправить «объявление, ожидаемую окончательную или эффективную окончательную переменную» в PreparedStatement.setString - PullRequest
0 голосов
/ 09 мая 2019

Проблема в том, что я пытаюсь установить подстановочный знак в PreparedStatement, но оператор setString выдает мне ошибку, описанную выше.

Я попытался изменить его на оператор setObeject с несколькими различными типами, такими как Types.VARCHAR. Я попытался объявить PreparedStatement в разных местах, и я попытался объявить «имя» в методе и в классе.

public String getTemplateText(String name) {
    try (
            Connection conn = getConnection();
            PreparedStatement stmt = conn.prepareStatement("SELECT templateText FROM TEMPLATE WHERE " +
                    "templateTag = ?");
            stmt.setString(1 , name); // this is the line that has the problem!
            ResultSet rs = stmt.executeQuery()
    ) {
        System.out.println("Set Text...");
        String tempText = rs.getString("templateText");
        return tempText;
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return "";
}
/* this is the SQL code for the table that I am trying to query */
CREATE TABLE TEMPLATE
(
    templateID      INTEGER PRIMARY KEY IDENTITY(1,1)
  , templateText    TEXT
  , templateTag     CHAR(25)
);

1 Ответ

3 голосов
/ 09 мая 2019

Вы не можете установить параметр stmt в вашем try-with-resources (поскольку привязка параметра void, а не closable ).Вместо этого вы можете вкладывать секунду try-with-resources после привязки параметра.Мол,

public String getTemplateText(String name) {
    try (Connection conn = getConnection();
            PreparedStatement stmt = conn
                    .prepareStatement("SELECT templateText FROM TEMPLATE WHERE " + 
                    "templateTag = ?")) {
        stmt.setString(1, name);
        try (ResultSet rs = stmt.executeQuery()) {
            System.out.println("Set Text...");
            String tempText = rs.getString("templateText");
            return tempText;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...