JUint单元测试连接池

这个博客详细介绍了如何在Java中配置并使用Druid连接池,以及如何结合JdbcTemplate进行数据库操作。主要步骤包括设置连接池的初始化大小、最大活动连接数等参数,并展示了获取单个值、执行批处理等核心方法的实现。此外,还提供了查询结果转换为Map列表的辅助方法。
摘要由CSDN通过智能技术生成

目录:
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

连接池类:


package com.yuntongxun.cc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;

import com.alibaba.druid.pool.DruidDataSource;

public final class DBUtils {

public static DruidDataSource dataSource;

   static {
      try {
         dataSource = new DruidDataSource();
         dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
         dataSource.setInitialSize(2);
         dataSource.setUrl("jdbc:mysql://xxxxxxx:3306/newfs?useUnicode=true&characterEncoding=UTF-8");
         dataSource.setUsername("xxxx");
         dataSource.setPassword("xxxxxxx");
         dataSource.setMaxActive(90);
          dataSource.setMinIdle(1);
          dataSource.setMaxWait(60000);
          dataSource.setValidationQuery("select 1 from dual");
          dataSource.setTestWhileIdle(true);
          dataSource.setTestOnBorrow(false);
          dataSource.setTestOnReturn(false);
          dataSource.setPoolPreparedStatements(true);
          dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);

      } catch(Exception ex) {
         ex.printStackTrace();
      }
   }

   /**
    * 获取单个值
    * @param sql
    * @param params
    * @return
    */
   public static Object getValue(String sql, Object[] params) {
      Connection conn = null;
      PreparedStatement pstmt = null;
      ResultSet rs = null;
      Object value = null;
      try {
         conn = dataSource.getConnection();
         pstmt = conn.prepareStatement(sql);
         setParams(pstmt, params);
         rs = pstmt.executeQuery();
         if (rs.next()) {
            value = rs.getObject(1);
         }
      } catch(SQLException ex) {
         ex.printStackTrace();
      } finally {
         close(conn, pstmt, rs);
      }
      return value;
   }

   /**
    * 获取sequence值
    * @param seqName
    * @return
    */
   public static Integer getSeqValue(String seqName) {
      String sql = "select " + seqName + ".NEXTVAL from dual";
      Integer value = Integer.valueOf(getValue(sql, null).toString());
      return value;
   }

   /**
    * 查询列表,封装在map中
    * @param sql
    * @param params
    * @return
    */
   public static List<Map<String,Object>> queryForMapList(String sql, Object[] params) {
      Connection conn = null;
      PreparedStatement pstmt = null;
      ResultSet rs = null;
      List<Map<String,Object>> list = null;
      try {
         conn = dataSource.getConnection();
         pstmt = conn.prepareStatement(sql);
         setParams(pstmt, params);
         rs = pstmt.executeQuery();
         list = convertToMapList(rs);
      } catch(SQLException ex) {
         ex.printStackTrace();
      } finally {
         close(conn, pstmt, rs);
      }
      return list;
   }

   /**
    * @author xiongxiaofei
    * @date   2015年2月13日
    * @desc   查询单条记录
    * @param sql
    * @param params
    * @return
    */
   public static Map<String,Object> queryForMap(String sql, Object[] params) {
      Map<String,Object> map = null;
      List<Map<String,Object>> list = queryForMapList(sql, params);
      if (list != null && list.size() > 0) {
         map = list.get(0);
      }
      return map;
   }

   /**
    * 批处理
    * @param sql
    * @param params
    * @return
    */
   public static int[] executeBatch(String sql, List<Object[]> batchArgs) {
      Connection conn = null;
      PreparedStatement pstmt = null;
      int[] ret = null;
      try {
         conn = dataSource.getConnection();
         pstmt = conn.prepareStatement(sql);
         for (Object[] arg : batchArgs) {
            for (int i = 0; i < arg.length; i++) {
               pstmt.setObject(i+1, arg[i]);
            }
            pstmt.addBatch();
         }
         ret = pstmt.executeBatch();
      } catch(Exception ex) {
         ex.printStackTrace();
      } finally {
         close(conn, pstmt, null);
      }
      return ret;
   }

   private static void setParams(PreparedStatement pstmt,
         Object[] params) throws SQLException {
      if (params != null && params.length > 0) {
         int i = 1;
         for (Object param : params) {
            pstmt.setObject(i++, param);
         }
      }
   }

   private static List<Map<String,Object>> convertToMapList(ResultSet rs)
         throws SQLException {
      List<Map<String,Object>> mapList = new ArrayList();
      if (rs != null) {
         ResultSetMetaData metaData = rs.getMetaData();
         int count = metaData.getColumnCount();
         while (rs.next()) {
            Map<String,Object> map = new LinkedHashMap();
            for (int i = 1; i <= count; i++) {
               String name = metaData.getColumnName(i);
               Object value = rs.getObject(name);
               map.put(name, value);
            }
            mapList.add(map);
         }
      }
      return mapList;
   }

   private static void close(Connection conn, PreparedStatement pstmt,
         ResultSet rs) {
      try {
         if (conn != null) {
            conn.close();
         }
         if (pstmt != null) {
            pstmt.close();
         }
         if (rs != null) {
            rs.close();
         }
      } catch(SQLException ex) {
         ex.printStackTrace();
      }
   }

}

使用:

  重点:

private static JdbcTemplate jdbcTemplate = new JdbcTemplate(DBUtils.dataSource);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值