在Try with Resources中使用PreparedStatement会显示“未知类”错误

时间:2017-07-08 21:12:57

标签: java jdbc try-with-resources

我正在全局初始化一个准备好的语句(所以每次运行一个函数时都没有预编译,只有在加载应用程序时),并尝试在try资源中使用preparedstatement,但是它显示了'未知类'错误。这是代码:

private PreparedStatement ingredientDelete;

public void deleteIngredient(String name) {
    try(ingredientDelete = con.prepareStatement(DELETE_INGREDIENT_BY_NAME)){
        ingredientDelete.setString(1, name);
        ingredientDelete.execute();

    }catch(SQLException e){
        System.out.println("Delete failed - " + e.getMessage());

    }
}

为清楚起见,连接是以另一种方法打开的,也是全局声明的。

1 个答案:

答案 0 :(得分:3)

这不是有效的Java。在try中声明的resourced必须是局部变量,因此声明了它们的类型。见the JLS

Resource:
    VariableModifiersopt Type VariableDeclaratorId = Expression
无论如何,使它成为一个字段是没有意义的,因为一个语句被绑定到一个连接,并且因为每次调用该方法时你都会重新创建它,因此可能在多个线程中使用相同的语句。

你是预先优化的,这是万恶之源。数据库已经有一个预准备语句的缓存。不需要自己做。而且你也应该使用连接池,而不是为你的所有程序使用单个连接。