如何在PreparedStatement.setString中修复“预期的声明,最终变量或有效地最终变量”

时间:2019-05-09 00:02:03

标签: java sql intellij-idea

问题是我试图在PreparedStatement中设置通配符,但是setString语句给了我上面的错误。

我尝试将其更改为具有Types.VARCHAR等多种不同类型的setObeject语句。我尝试在不同的地方声明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 个答案:

答案 0 :(得分:3)

您无法在stmt中设置try-with-resources参数(因为绑定参数是void而不是 closes )。相反,您可以在绑定参数后嵌套第二个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 "";
}