Sql Java结束语句

Sql Java结束语句,sql,jdbc,execute,Sql,Jdbc,Execute,我不确定,哪种方法更好 con.createStatement().execute("..."); 或 使用第一个方法时,create语句是关闭的还是保持打开状态?我确信在第二种方法中,语句将被关闭,但在第一种方法中?有人知道吗?在第一段代码中,您没有显式地关闭语句,因此不能指望它会被关闭。一些驱动程序的实现在语句的finalize()方法中调用close(),但是您不应该依赖于此,应该始终显式地关闭语句。两者都con.createStatement()。执行(“…”和语句st=con.cre

我不确定,哪种方法更好

con.createStatement().execute("...");


使用第一个方法时,create语句是关闭的还是保持打开状态?我确信在第二种方法中,语句将被关闭,但在第一种方法中?有人知道吗?

在第一段代码中,您没有显式地关闭语句,因此不能指望它会被关闭。一些驱动程序的实现在语句的
finalize()
方法中调用
close()
,但是您不应该依赖于此,应该始终显式地关闭语句。

两者都
con.createStatement()。执行(“…”
语句st=con.createStatement()有同样的意义。但是,关闭语句不是使用第一个方法执行的。关闭
结果集
语句
是一种很好的做法。如果未关闭
语句
,您可能会遇到其他问题。您可以关闭
连接
,但在使用连接池时,这是不可能的。另外,第二种方法在使用
PrepairedStatement
时非常有用,因为它可以为
PrepairedStatement

设置参数。如果不显式关闭
语句
对象,则它将保持打开状态,至少最初是这样。它可能在垃圾收集器确定它不可访问后关闭一段时间,如果发生这种情况的话。当连接关闭时,如果连接仍处于打开状态,它将关闭

最好的形式通常是:

Statement st = con.createStatement();

try {
    // ...
    st.execute("...");
    // ...
} finally {
    st.close();
}

通过在创建语句后立即启动
try
块,可以确保语句在超出范围之前(在
finally
块中)将被关闭——即使在语句中的某个地方抛出了任意异常。

两者都不好,尽管第二种方法比第一种方法更好。当你完成一个陈述时,你应该总是结束它(不是更早,但绝对不是永远)。您的第二个备选方案尝试关闭语句,但如果
execute
引发异常,则实际上无法关闭语句

要保证语句的完结,可以使用e(在Java 7中引入):

如果不幸被困在Java 6或更早版本上,则需要使用try/finally:

Statement statement = connection.createStatement();
try {
    statement.execute();
    // Other things you want to with statement...
} finally {
    statement.close();
}

在这个问题上没有结果集。或者,使用Java 7+将是一个更整洁的选择。我强烈反对。在这方面,
con.createStatement().execute(“…”)应该始终关闭语句
显然是低劣的,因为您不再有关闭语句的句柄。我同意,但是大多数主要开发人员都不是关闭语句。但是,他们可以在没有结束语句的情况下执行任务。但是,当项目变得更大时,他们会遇到问题。但简单的程序不会对非封闭语句产生问题。最好在早期就忘记不良行为/实践,而不是将其深深嵌入到工作方式中,然后不得不忘记它们。
try (Statement statement = connection.createStatement) {
    statement.execute();
    // Other things you want to with statement...
}
Statement statement = connection.createStatement();
try {
    statement.execute();
    // Other things you want to with statement...
} finally {
    statement.close();
}