java - 如何将多个 "SELECT"语句合并为一个?

标签 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
    }
}

执行 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/

相关文章:

java - 文件的 Junit 测试用例

java - SQL Server Jdbc 驱动程序无法使用 TLS1.2 连接到数据库

c# - Visual Studio/Microsoft sql 关系键错误

MySQL,选择,比较两个表中的值

javascript - 如何在没有任何框架代码的情况下使用 JavaScript 选择自定义选择组件的选项?

java - 如果父级不使用 Java 中的 stdout/stderr,为什么进程会挂起?

java - 嵌套循环内递增

java - 相对布局中的 ViewPager 消耗完整高度(选项卡)

SQL - 在另一个带有更新的身份种子的插入中插入查询

c - 使用 Select 区分套接字