在 PreparedStatement 中重用参数?
Reuse a parameter in a PreparedStatement?
我正在像这样将参数传递给 PreparedStatement :
public void getNodes(String runId, File file, Connection conn) {
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(Mat.queries.get("NettingNode.QUERY"));
ps.setString(1, runId);
ps.setFetchSize(10000);
rs = ps.executeQuery();
// etc.
} catch (Exception e) {
logger.error(e, e);
} finally {
close(rs, ps);
}
}
查询如下所示:
select * from table_1 where run_id = ?
现在我想像这样修改我的查询,并重用第一个参数(?
都将使用 runId 参数):
select * from table_1 where run_id = ?
union
select * from table_2 where run_id = ?
如果不这样做可能吗:
ps.setString(1, runId);
ps.setString(2, runId);
普通 JDBC 无法做到这一点。您可以改为使用 Spring 的 JDBC 模板,它将支持您想要的命名参数,并在语句中需要的任何地方重复使用相同的名称。
见Named parameters in JDBC
以下内容适用于 oracle。但是,如果表格很大,这可能不是一个好的选择。
Select * from ( SELECT ? run_id FROM DUAL ) A
JOIN ( select * from table_1
union
select * from table_2
) B ON A.run_id = B.run_id
我正在像这样将参数传递给 PreparedStatement :
public void getNodes(String runId, File file, Connection conn) {
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(Mat.queries.get("NettingNode.QUERY"));
ps.setString(1, runId);
ps.setFetchSize(10000);
rs = ps.executeQuery();
// etc.
} catch (Exception e) {
logger.error(e, e);
} finally {
close(rs, ps);
}
}
查询如下所示:
select * from table_1 where run_id = ?
现在我想像这样修改我的查询,并重用第一个参数(?
都将使用 runId 参数):
select * from table_1 where run_id = ?
union
select * from table_2 where run_id = ?
如果不这样做可能吗:
ps.setString(1, runId);
ps.setString(2, runId);
普通 JDBC 无法做到这一点。您可以改为使用 Spring 的 JDBC 模板,它将支持您想要的命名参数,并在语句中需要的任何地方重复使用相同的名称。
见Named parameters in JDBC
以下内容适用于 oracle。但是,如果表格很大,这可能不是一个好的选择。
Select * from ( SELECT ? run_id FROM DUAL ) A
JOIN ( select * from table_1
union
select * from table_2
) B ON A.run_id = B.run_id