什么时候应该关闭Java PreparedStatement?

| 在教程“使用预备语句”中,它指出应始终将其关闭。假设我有一个功能
getPrice() {
}
我希望每秒被调用多次。此方法是否应该通过每个方法调用来打开和关闭PreparedStatement?这似乎有很多开销。     
已邀请:
        首先,
PreparedStatement
永远不会打开。它只是执行的准备好的
Statement
。该语句被发送到执行由“ 1”编译的SQL语句的RDBMS。与SQL语句的连接应在SQL查询期间打开,并在不需要其他RDMS调用时关闭。 您可以根据需要发送许多
Statement
/
PreparedStatement
,前提是一旦它们完成close6和
PreparedStatement
的关闭,然后关闭RDBMS连接。     
           此方法是否应该通过每个方法调用来打开和关闭PreparedStatement? 如果要在方法中创建“ 1”对象,则必须在完成后将其关闭。您可以将“ 1”对象重用于多次执行,但是一旦完成,就必须关闭它。 这是因为尽管所有的Statement对象(包括PreparedStatements)都应该在调用“ 10”时被关闭,但这种情况很少发生。在某些JDBC驱动程序中,尤其是在Oracle的JDBC驱动程序中,如果该连接具有未关闭的ResultSet和Statement对象,则该驱动程序将无法关闭该连接。这意味着在这些驱动程序上: 您永远不应丢失对PreparedStatement对象的引用。如果这样做,则直到垃圾回收发生,连接才会关闭。如果要对不同的SQL语句重用PreparedStatement实例,则很容易忘记这一点。 一旦不再需要它,您应该关闭PreparedStatement。只有这样,Connection.close()才能真正断开物理连接。     
        如教程中的示例所示,您应该在执行所有查询之后将其关闭。 语句关闭后,RDMS可能会释放与您的语句关联的所有资源。因此,要进一步使用它,您必须重新准备完全相同的语句。     
        我认为,在每次数据库交互之后,如果连接倾向于执行更多操作,则必须关闭除连接以外的每个组件(如语句,结果集)。 而且,如果您一次又一次地创建准备好的语句,则无需担心,因为当您一次又一次地使用同一条语句时,就不会有任何性能问题。     
        是的。如果您要创建n次准备好的语句,就没有问题了,因为您将在所有地方使用相同的语句。这里无需对性能进行任何观察 谢谢     

要回复问题请先登录注册