Java 结束语
Java closing Statement
我不确定,哪种方法更好?
con.createStatement().execute("...");
或
Statement st = con.createStatement();
st.execute("...");
st.close();
使用第一种方法时,语句create是关闭还是保持打开状态?我确定在第二种方法中语句将被关闭,但在第一种方法中呢?有人知道吗?
在第一个片段中,您没有明确关闭语句,因此您不能指望它被关闭。一些驱动程序的实现在语句的 finalize()
方法中调用 close()
,但你不应该依赖它,并且应该始终显式关闭你的语句。
con.createStatement().execute("...");
和 Statement st = con.createStatement();
意思相同。但是关闭语句不是用第一种方法执行的。关闭 ResultSet
或 Statement
是一个好习惯。您可能会遇到未关闭 Statements
的其他问题。您可以改为关闭 Connection
,但在使用连接池时这是不可能的。另外第二种方法在使用PrepairedStatement
时非常有用,因为它可以给PreparedStatement
.
设置参数
如果您没有明确关闭 Statement
对象,那么它将保持打开状态,至少在开始时是这样。它 可能 在垃圾收集器确定它无法访问后的某个时间关闭,如果发生这种情况的话。它将在连接关闭时关闭,如果那时它仍然打开。
最佳形式通常是:
Statement st = con.createStatement();
try {
// ...
st.execute("...");
// ...
} finally {
st.close();
}
通过在创建语句后立即启动 try
块,您可以确保该语句在超出范围之前将被关闭(在 finally
块中)——即使在某处抛出任意异常。
两者都不好,尽管第二种选择比第一种更好。当你完成时,你应该总是关闭一个声明(不是很快,但绝对不是永远不会)。您的第二个替代方案尝试关闭该语句,但如果 execute
抛出异常,则实际上不会这样做。
要保证语句的结束,您可以使用 try-with-resource(在 Java 7 中介绍):
try (Statement statement = connection.createStatement) {
statement.execute();
// Other things you want to with statement...
}
如果您不幸卡在 Java 6 或更早版本,您需要使用 try/finally:
Statement statement = connection.createStatement();
try {
statement.execute();
// Other things you want to with statement...
} finally {
statement.close();
}
我不确定,哪种方法更好?
con.createStatement().execute("...");
或
Statement st = con.createStatement();
st.execute("...");
st.close();
使用第一种方法时,语句create是关闭还是保持打开状态?我确定在第二种方法中语句将被关闭,但在第一种方法中呢?有人知道吗?
在第一个片段中,您没有明确关闭语句,因此您不能指望它被关闭。一些驱动程序的实现在语句的 finalize()
方法中调用 close()
,但你不应该依赖它,并且应该始终显式关闭你的语句。
con.createStatement().execute("...");
和 Statement st = con.createStatement();
意思相同。但是关闭语句不是用第一种方法执行的。关闭 ResultSet
或 Statement
是一个好习惯。您可能会遇到未关闭 Statements
的其他问题。您可以改为关闭 Connection
,但在使用连接池时这是不可能的。另外第二种方法在使用PrepairedStatement
时非常有用,因为它可以给PreparedStatement
.
如果您没有明确关闭 Statement
对象,那么它将保持打开状态,至少在开始时是这样。它 可能 在垃圾收集器确定它无法访问后的某个时间关闭,如果发生这种情况的话。它将在连接关闭时关闭,如果那时它仍然打开。
最佳形式通常是:
Statement st = con.createStatement();
try {
// ...
st.execute("...");
// ...
} finally {
st.close();
}
通过在创建语句后立即启动 try
块,您可以确保该语句在超出范围之前将被关闭(在 finally
块中)——即使在某处抛出任意异常。
两者都不好,尽管第二种选择比第一种更好。当你完成时,你应该总是关闭一个声明(不是很快,但绝对不是永远不会)。您的第二个替代方案尝试关闭该语句,但如果 execute
抛出异常,则实际上不会这样做。
要保证语句的结束,您可以使用 try-with-resource(在 Java 7 中介绍):
try (Statement statement = connection.createStatement) {
statement.execute();
// Other things you want to with statement...
}
如果您不幸卡在 Java 6 或更早版本,您需要使用 try/finally:
Statement statement = connection.createStatement();
try {
statement.execute();
// Other things you want to with statement...
} finally {
statement.close();
}