数据库查询返回List<Map<String, Object>>

该方法实现了一个从数据库查询并返回List<Map<String, Object>>的功能。首先,根据需要打开数据库连接,然后使用PreparedStatement执行SQL查询。获取到ResultSet后,遍历结果集,并将每一项转换为Map,再存入List中。如果在执行过程中出现异常,会捕获并记录错误信息,最后关闭相关资源。" 103329710,9104987,HTML5与SVG实现评分表情滚动效果,"['前端开发', 'web前端', 'CSS', 'HTML', 'SVG']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

protected List<Map<String, Object>> doQuery(String sql) throws Exception {
  logger.debug("method:doQuery----START");
  List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

  // 关闭连接flag
  boolean colseFlag = false;

  // 打开DB链接
  if (this.connection == null) {
   this.connection = this.getDbConnection();
   colseFlag = true;
  }
  PreparedStatement preStat = null;

  if (this.connection != null) {
   try {
    preStat = this.connection.prepareStatement(sql);
    // 查询一个结果集
    ResultSet rs = null;
    Map<String, Object> map = null;
    logger.debug("SQL:" + sql);
    rs = preStat.executeQuery();

    // 生成ResultSetMetaData
    ResultSetMetaData rsMeta = preStat.getMetaData();
    while (rs.next()) {
     map = this.Result2Map(rs, rsMeta);
     // 追加到list中
     list.add(map);
    }
   } catch (Exception e) {
    // 记录错误信息
    logger.error(e.getMessage(), e);
    throw e;
   } finally {
    if (preStat != null) {
     try {
      preStat.close();
     } catch (SQLException e) {
      logger.error(e.getMessage(), e);
      throw e;
     } finally {
      preStat = null;
     }
    }
    // 关闭数据库连接
    if (colseFlag) {
     this.closeDbConnection(this.connection);
    }
   }
  } else {
   throw new Exception("DB链接未取到.");
  }
  logger.debug("method:doQuery----END");
  return list;
 }

 

private Map<String, Object> Result2Map(ResultSet rs, ResultSetMetaData meta) throws SQLException {
  Map<String, Object> map = new HashMap<String, Object>();
  for (int i = 1; i <= meta.getColumnCount(); i++) {
   map.put(meta.getColumnName(i), rs.getObject(meta.getColumnName(i)));
  }
  return map;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值