记一次JDBC进程中断的问题

〇、问题描述

在一次功能模块的开发中,手动创建JDBC连接获取数据库数据。其中有这么一段代码:
1 Class.forName(CompConst.DATABASE_CONNECTION_PARAM.DRIVER_MYSQL);
2 connection = DriverManager.getConnection(url, databaseInfo.getUsername(), databaseInfo.getPassword());
3 preparedStatement = connection.prepareStatement(sql);
4 resultSet = preparedStatement.executeQuery();
5 resultSet.last();
6 int sizeOfResultSet = resultSet.getRow();
7 resultSet.beforeFirst();

每次执行完第四行并向下执行的时候,程序就直接结束,返回为“Process finished with exit code 0”,也没有异常。找了很久原因也没找到。

一、查找问题原因

首先,其中这段代码在另一个模块中是正常运行的,没道理换一个地方代码就出问题了。于是开始考虑是不是代码之外的部分出了问题。
于是,对比正确运行的模块和上述报错部分执行完preparedStatement.executeQuery()之后得到的resultSet对象有什么不同,发现问题代码得到的resultSet中的数据存在问题,而正常执行模块的这段代码得到的resultSet是没有问题的。
接着就是考虑到底是哪个部分的问题了。抛开一模一样的代码,url,username,password,也就是数据库连接参数肯定没问题。那么接下来就是考虑SQL是不是有问题了,虽然没有报异常,但是现在也是向这个方向考虑。
检查SQL,有关联查询如下:
1 SELECT 
2   *,
3   d.`DM_NAME`,
4   p.party_id AS 'rm_party_id' 
5 FROM
6   `party` p,
7   `dom` d 
8 WHERE p.`dom_id` = d.`dom_id`
显然,*里是包含d.`DOMAIN_NAME`的,也就是说,在查询结果中有字段名相同的两个字段。
然后修改SQL如下:
1 SELECT 
2   p.*,
3   d.`DM_NAME`,
4   p.party_id AS 'rm_party_id' 
5 FROM
6   `party` p,
7   `dom` d 
8 WHERE p.`dom_id` = d.`dom_id`
再次执行,问题已经解决。

二、结论

对于以上操作,目前做出以下猜测:程序中断的问题可能为结果集中存在两个字段名相同的字段。但是为什么没有抛出异常,问题究竟是不是这个,有待确认。之后查阅相关资料或者经代码确认后,会对结论进行进一步确认,并更新此篇博客。
posted @ 2021-02-20 16:48  芜墨  阅读(217)  评论(0)    收藏  举报