使用Java+TestNG调用GET接口时遇PostgreSQL列不存在错误求助
问题排查:PostgreSQL找不到application列的解决方案
已完成操作
- 测试前置准备:在
@Before方法中通过POST接口创建品类利润率设置,调用GET API获取列表,预期响应包含xyz列:{"totalCount": 3418,"totalPages": 7,"data": [{"field1": 1,"field2": "ABC","field3": 904,"field4": "aa","XYZ": "1"}]} - 添加Getter/Setter:在模型类中为
xyz字段添加注解及方法:@JsonProperty("xyz") public String getXyz() { return xyz; } @JsonProperty("xyz") public void setXyz(String xyz) { this.xyz = xyz; } - 更新测试断言:新增对
xyz字段的断言逻辑:softAssert.assertEquals(setting.getXyz(), CategorySettingDAOFunctions.getXyz(), "xyz value is not equal"); - 更新DAO查询:修改
selectCategoryMarginSettingFromId方法的SELECT语句,加入XYZ列,并在ResultSet中读取该值:
更新后的SELECT语句:try { conn = DatabaseUtil.getConnection(); preparedStatement = conn.prepareStatement(selectQuery); ResultSet rs = preparedStatement.executeQuery(); while (rs.next()) { xyz = rs.getString("xyz"); } }SELECT column_1, column_2, column_3, column_4, column_5, column_6, column_7, column_8, column_9, column_10, column_11, column_12, column_13, column_14, column_15, XYZ, column_17, column_18, column_19 FROM table_A LEFT JOIN table_B ON table_A.ref_id = table_B.id LEFT JOIN table_C ON table_C.id = table_A.other_ref_id LEFT JOIN table_D ON table_D.id = table_C.region_id LEFT JOIN table_E ON table_E.id = table_C.market_id WHERE table_A.type = 1 AND table_A.status = 1 AND table_A.id = %s;
报错信息
严重错误: org.postgresql.util.PSQLException: ResultSet中未找到列名application。
解决方案
- 定位代码位置:检查所有处理ResultSet的DAO代码,找到调用
rs.getString("application")(或类似读取application列)的逻辑——你的SELECT查询未包含该列,但代码中尝试读取它,导致报错。 - 处理列缺失问题:
- 如果
application是业务需要的字段:在SELECT语句中添加该列(注意指定所属表,比如table_B.application,避免多表同名冲突);同时确认数据库对应表中存在该列,且列名大小写与代码、查询语句一致(PostgreSQL对大小写敏感)。 - 如果
application是冗余代码:直接删除读取该列的语句即可。
- 如果
- 验证生效:清理项目编译缓存,重新编译后运行测试,确认报错消除。
内容的提问来源于stack exchange,提问作者userfa
相关产品推荐
相关产品推荐

