记一次使用JDBC过程中进程结束的问题

〇、问题描述

  在一次功能模块的开发中,手动创建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`

  再次执行,问题已经解决。

二、结论

   对于以上操作,目前做出以下猜测:程序中断的问题可能为结果集中存在两个字段名相同的字段。但是为什么没有抛出异常,问题究竟是不是这个,有待确认。之后查阅相关资料或者经代码确认后,会对结论进行进一步确认,并更新此篇博客。

猜你喜欢

转载自www.cnblogs.com/Tsingmo/p/10329129.html