Java 语句对象重用?

2022-09-01 14:21:55

我想知道我们是否可以重用相同的 Statement 对象来执行多个查询。或者,我们是否应该为不同的查询创建一个新语句。

例如

Connection con = getDBConnection();
Statement st1 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
int i = st1.executeUpdate("update tbl_domu set domU_status=1 where domU_id=" + dom_U_id);
Statement st2 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
int j = st2.executeUpdate("insert into tbl_domU_action_history values('" + dom_U_name + "', 1, '" + date + "')");  

在上面的例子中,对两个 executeUpdate() 查询使用相同的语句 st1 是否有任何危害?我可以将同一个语句对象 st1 用于另一个 executeQuery() 吗?


答案 1

我在Javadoc for Statement中遇到了我正在寻找的响应:

默认情况下,每个对象只能同时打开一个对象。因此,如果一个对象的读取与另一个对象的读取交错,则每个对象必须由不同的对象生成。接口中的所有执行方法都隐式关闭语句的当前对象(如果存在打开的对象)。ResultSetStatementResultSetStatementStatementResultSet


答案 2

是的,可以。但是,最好使用它来避免SQL注入漏洞。PreparedStatement


推荐