〇、问题描述
在一次功能模块的开发中,手动创建JDBC连接获取数据库数据。其中有这么一段代码:
Class.forName(CompConst.DATABASE_CONNECTION_PARAM.DRIVER_MYSQL); connection = DriverManager.getConnection(url, databaseInfo.getUsername(), databaseInfo.getPassword()); preparedStatement = connection.prepareStatement(sql); resultSet = preparedStatement.executeQuery(); resultSet.last(); int sizeOfResultSet = resultSet.getRow(); resultSet.beforeFirst();
每次执行完第四行并向下执行的时候,程序就直接结束,返回为“Process finished with exit code 0”,也没有异常。找了很久原因也没找到。
一、查找问题原因
首先,其中这段代码在另一个模块中是正常运行的,没道理换一个地方代码就出问题了。于是开始考虑是不是代码之外的部分出了问题。
于是,对比正确运行的模块和上述报错部分执行完preparedStatement.executeQuery()之后得到的resultSet对象有什么不同,发现问题代码得到的resultSet中的数据存在问题,而正常执行模块的这段代码得到的resultSet是没有问题的。
接着就是考虑到底是哪个部分的问题了。抛开一模一样的代码,url,username,password,也就是数据库连接参数肯定没问题。那么接下来就是考虑SQL是不是有问题了,虽然没有报异常,但是现在也是向这个方向考虑。
检查SQL,有关联查询如下:
SELECT *, d.`DM_NAME`, p.party_id AS 'rm_party_id' FROM `party` p, `dom` d WHERE p.`dom_id` = d.`dom_id`
显然,*里是包含d.`DOMAIN_NAME`的,也就是说,在查询结果中有字段名相同的两个字段。
然后修改SQL如下:
SELECT p.*, d.`DM_NAME`, p.party_id AS 'rm_party_id' FROM `party` p, `dom` d WHERE p.`dom_id` = d.`dom_id`
再次执行,问题已经解决。
二、结论
对于以上操作,目前做出以下猜测:程序中断的问题可能为结果集中存在两个字段名相同的字段。但是为什么没有抛出异常,问题究竟是不是这个,有待确认。之后查阅相关资料或者经代码确认后,会对结论进行进一步确认,并更新此篇博客。