jdbc元数据调试运行结果差异

时间:2018-11-05 11:01:45

标签: eclipse postgresql spring-boot spring-jdbc hikaricp

我有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")

0 个答案:

没有答案