我有DAO类,它获取对应于特定模式的表名。
@Repository
@Transactional
public class TableMetadataDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private DataSource ds;
public List<ColumnMetadata> load() {
List<ColumnMetadata> list = jdbcTemplate.execute(new ConnectionCallback<List<ColumnMetadata>>() {
public List<ColumnMetadata> doInConnection(Connection con) throws SQLException {
List<ColumnMetadata> list = new ArrayList<>();
DatabaseMetaData metaData = con.getMetaData();
ResultSet rs = metaData.getColumns("", "", "tmp_%", "");
while (rs.next()) {
ColumnMetadata cmd = new ColumnMetadata();
cmd.setTableName(rs.getString("TABLE_NAME"));
list.add(cmd);
}
rs.close();
return list;
}
});
}
}
我正在从弹簧启动测试中调用load方法:
@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource(locations="classpath:application-it.properties")
public class TableMetadataControllerTest {
@Autowired
private TableMetadataDAO tmd;
@SuppressWarnings("unchecked")
@Test
public void tmpTables() throws Exception {
List<ColumnMetadata> list = tmd.load();
}
}
现在,我在List<ColumnMetadata> list = tmd.load();
上设置一个断点,然后跳过。我得到的结果是正确的,符合我的期望。但是,当我逐步进入并遍历DAO方法时,我在方法调用org.postgresql.util.PSQLException: ResultSet not positioned properly, perhaps you need to call next.
的{{1}}上遇到了异常。
我真的很困惑,不知道下一步该怎么做才能找到导致这种奇怪行为的原因。您能否提供一些建议以找出可能的根本原因可以采取哪些步骤?
已编辑: Hikari配置日志
rs.getString("TABLE_NAME")