java - 使用 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);
}
}
解决方案
根据您上面的代码示例,这应该适合您:
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 中有一条匹配记录
推荐阅读
- c++ - 将类分离为头文件 (.h) 和源文件 (.cpp) 的问题
- postgresql - 在 Postgres 的数据库中插入图像
- python - 将变量传递给另一个 DEF
- python - 自动将“A”替换为“B”,将“B”替换为“A”,将“C”替换为“D”等......在列表中?
- c++ - 实现家谱时出现 C++ 核心转储错误
- azure-devops-server-2019 - Azure DevOps 服务器 - 获取项目的“范围”
- java - 当我使用多线程进行更新操作时,数据库端会发生什么?
- android - Android:使用 Retrofit 获取不同的对象列表数据
- sockets - 测试羽毛插座
- html - 将局部变量值订阅到 Angular 中另一个组件中的变量的 Observable