我正在全局初始化一个准备好的语句(所以每次运行一个函数时都没有预编译,只有在加载应用程序时),并尝试在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());
}
}
为清楚起见,连接是以另一种方法打开的,也是全局声明的。
答案 0 :(得分:3)
这不是有效的Java。在try中声明的resourced必须是局部变量,因此声明了它们的类型。见the JLS
Resource:
VariableModifiersopt Type VariableDeclaratorId = Expression
无论如何,使它成为一个字段是没有意义的,因为一个语句被绑定到一个连接,并且因为每次调用该方法时你都会重新创建它,因此可能在多个线程中使用相同的语句。
你是预先优化的,这是万恶之源。数据库已经有一个预准备语句的缓存。不需要自己做。而且你也应该使用连接池,而不是为你的所有程序使用单个连接。