目前,我正在使用 for 循环,当 orgList
中有数千个元素时,它的速度慢得令人无法接受:
String sql = "SELECT xua.XUAID, xua.XUA01, xua.XUA02 "
+ "FROM dbo.XDSysUseArea xua "
+ "WHERE xua.XUA03=?";
conn = ds.getConnection();
ps = conn.prepareStatement(sql);
for(HotelSource org : orgList) {
ps.setString(1, org.getPrimaryKey());
rs = ps.executeQuery();
while (rs.next()) {
// do sth
}
}
执行 SELECT
的正确方法是什么?
最佳答案
您应该使用 SQL IN
,例如:
SELECT ... FROM ... WHERE xua.XUA03 IN (x, y, z, ...)
您仍然可以参数化您的查询,但您需要在语句中生成正确数量的 ?
。所以这里有一些伪代码,因为我不使用 Java:
String params = "?, ?, ?, ?"; //you will have to generate enough of these yourself
//This is an exercise for you!
String sql = "SELECT xua.XUAID, xua.XUA01, xua.XUA02 "
+ "FROM dbo.XDSysUseArea xua "
+ "WHERE xua.XUA03 IN (" + params + ")";
conn = ds.getConnection();
ps = conn.prepareStatement(sql);
int index = 1;
for(HotelSource org : orgList) {
ps.setString(index, org.getPrimaryKey());
// ^^^^^ use index here
index++;
}
rs = ps.executeQuery();
while (rs.next()) {
// do sth
}
注意:这样做的缺点是您提到您在 orgList
中有数千个条目,这使得使用此方法非常糟糕。事实上,SQL Server 不允许您使用超过几千个参数。
关于java - 如何将多个 "SELECT"语句合并为一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45074938/