Ran*_*ian 1 java sql-server select
目前,我正在使用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
}
}
Run Code Online (Sandbox Code Playgroud)
做正确的方法是什么SELECT?
您应该使用SQL IN,例如:
SELECT ... FROM ... WHERE xua.XUA03 IN (x, y, z, ...)
Run Code Online (Sandbox Code Playgroud)
您仍然可以参数化您的查询,但您需要?在语句中生成正确的数字.所以这里有一些伪代码,因为我不做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
}
Run Code Online (Sandbox Code Playgroud)
注意:这样做的缺点是你提到你有成千上万的条目,orgList这使得使用这种方法真的很糟糕.实际上,SQL Server不允许您使用超过几千个参数.
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |