首页 > 解决方案 > 使用 SQL 子查询计算表中的行数并根据结果通过/失败 java 测试

问题描述

下面是我的 2 个 SQL Server 表。

地址

addressId | addressName |
2         | testAddress |

链接

linkId | clientId | addressId |
1      | 4        | 2         |

我正在尝试编写一个使用 SQL 子查询来检查 taddress 中是否存在记录的 java 测试。

例如:

SELECT COUNT(*) FROM Taddress
WHERE addressId =
(SELECT addressId FROM Tlink
WHERE clientId = param)

目前,当我运行以下测试时,即使 tLink 中不存在 clientId 参数,测试也始终通过。

try {
        dbAccessSetUp();
        ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM taddress a INNER JOIN tlink l on a.address_id = l.internal_address_id WHERE l.ext_client_id =" + this.clientNo);

        if(!rs.next()) {
            fail("Record does not exist in taddress based on ExtClientNo");
        }

        int count = 0;

        while(rs.next()) {              

            count = rs.getInt(1);
            System.out.println("number of count : " + count);
            assertTrue(0 < count);
        } 
        rs.close(); 
    } catch(SQLException se) { 
        se.printStackTrace(); 
        assertEquals(true, false);
    } catch(Exception e) { 
        e.printStackTrace();
        assertEquals(true, false);
    } finally { 
        try { 
            if(stmt!=null) stmt.close();  
        } catch(SQLException se2) {
            assertEquals(true, false);
        } 
        try { 
            if(conn!=null) conn.close(); 
        } catch(SQLException se) {
            se.printStackTrace(); 
            assertEquals(true, false);
        } 
    } 

标签: javasqlsql-serversubquery

解决方案


根据您上面的代码示例,这应该适合您:

try {
        dbAccessSetUp();
        ResultSet rs = stmt.executeQuery("SELECT COUNT(*)FROM taddress A INNER JOIN tlink L ON A.address_id = L.internal_address_id WHERE L.ext_client_id =" + this.clientNo);
        int count=0;
        while(rs.next()) {
            count =  ((Number) rs.getObject(1)).intValue();

        }

        if(count > 0) {
            assertTrue(true);
            System.out.println(count + " record(s) in taddress based on ExtClientNo");
        }
        else {
            fail("No records in taddress");
        }

    }catch(Exception ex) {
        System.out.println(ex.getMessage());
    }

如果出现以下情况,这将失败:

  • 您的客户在 tlink 中没有匹配记录否
  • tlink中有匹配记录,但taddress中没有匹配记录

如果:

  • tlink 中有一条匹配记录 & taddress 中有一条匹配记录

推荐阅读