Sye*_*hiq 27 java mysql sql jdbc
请在将此标记为重复之前阅读.我从谷歌和SO搜索了很多,但我无法找到我想要的确切答案.
我的问题:在JDBC中,我可以使用单个Statement
对象executeQuery("")
多次调用吗?安全吗?或者我应该在每次查询后关闭语句对象,并创建新对象以执行另一个查询.
例如:
Connection con;
Statement s;
ResultSet rs;
ResultSet rs2;
try
{
con = getConnection();
s = con.prepareStatement();
try
{
rs = s.executeQuery(".......................");
// process the result set rs
}
finally
{
close(rs);
}
// I know what to do to rs here
// But I am asking, should I close the Statement s here? Or can I use it again for the next query?
try
{
rs2 = s.executeQuery(".......................");
// process the result set rs2
}
finally
{
close(rs2);
}
}
finally
{
close(s);
close(con);
}
Run Code Online (Sandbox Code Playgroud)
Dur*_*dal 23
是的,您可以重复使用Statement
(特别是a PreparedStatement
),并且通常应该使用JDBC.如果你没有重复使用你的语句并立即创建另一个相同的Statement
对象,那将是低效和糟糕的风格.关闭它,将它关闭在finally块中是合适的,就像你在这个片段中一样.
有关您要求的示例,请查看此链接:jOOq文档
我不知道你为什么这么问.该API设计和文档显示它是完全正常(甚至预期)重新使用Statement
对象多execute
,executeUpdate
和executeQuery
电话.如果不允许在Java文档中明确记录(并且API可能会有所不同).
此外,apidoc Statement
说:
如果存在打开的对象,
Statement
接口中的所有执行方法都会隐式关闭一个statment的[ sic ]当前ResultSet
对象.
这表明您可以多次使用它.
TL; DR:是的,您可以多次调用execute
单个Statement
对象,只要您意识到以前打开的任何内容ResultSet
都将被关闭.
你举的例子错误地使用PreparedStatement
,并且你不能(或:不应该)能够调用任何的execute...
接受方法String
上PreparedStatement
:
SQLException
- 如果[...]方法被调用PreparedStatement
或CallableStatement
但也要回答PreparedStatement
:a的整个目的PreparedStatement
是使用参数占位符预编译一个语句,并将其重用于具有不同参数值的多个执行.