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();
}