Package com.firefly.db

Source Code of com.firefly.db.QueryHelper

package com.firefly.db;

import java.math.BigInteger;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

/**
* <p>数据库查询助手</p>
* 提供数据库基本的增删改查操作
*
* @author 须俊杰
* @version 1.0 2011-6-22
*/
@SuppressWarnings("unchecked")
public class QueryHelper {

  private final static QueryRunner _runner = new QueryRunner();

  /**
   * 返回单一列时用到的handler
   */
  private final static ScalarHandler _scaleHandler = new ScalarHandler() {
    @Override
    public Object handle(ResultSet rs) throws SQLException {
      Object obj = super.handle(rs);
      if (obj instanceof BigInteger)
        return ((BigInteger) obj).longValue();
      return obj;
    }
  };

  private final static ColumnListHandler _columnListHandler = new ColumnListHandler(){
    @Override
    protected Object handleRow(ResultSet rs) throws SQLException {
      Object obj = super.handleRow(rs);
      if(obj instanceof BigInteger)
        return ((BigInteger)obj).longValue();
      return obj;
    }
   
  };
 
  /**
   * 判断是否为原始类型
   * @param clazz
   * @return
   */
  private final static boolean _IsPrimitive(Class<?> clazz) {
    return clazz.isPrimitive() || PrimitiveClasses.contains(clazz);
  }

  @SuppressWarnings("serial")
  private final static List<Class<?>> PrimitiveClasses = new ArrayList<Class<?>>() {
    {
      add(Long.class);
      add(Integer.class);
      add(String.class);
      add(java.util.Date.class);
      add(java.sql.Date.class);
      add(java.sql.Timestamp.class);
    }
  };

  /**
   * 获取数据库连接
   *
   * @return 数据连接
   * @throws SQLException 如果获取数据库连接失败
   */
  private static Connection getConnection() throws SQLException {
    return DBManager.getConnection();
  }

  /**
   * 读取某个对象
   * @param beanClass 需要返回的对象类型
   * @param sql 数据库sql语句
   * @param params sql中的参数
   * @return 查询结果
   * @throws SQLException 数据库出错时抛出异常
   */
  public static <T> T read(Class<T> beanClass, String sql, Object... params) throws SQLException {
      // 判断是否为原始类型,如果是就用_scaleHandler,否则根据beanClass参数生成一个BeanHandler
        return (T) _runner.query(getConnection(), sql,
                _IsPrimitive(beanClass) ? _scaleHandler
                        : new BeanHandler<T>(beanClass), params);
  }

  /**
   * 读取对象列表
   * @param beanClass 需要返回的对象类型
   * @param sql 数据库sql语句
   * @param params sql中的参数
   * @return 查询结果(列表)
   * @throws SQLException 数据库出错时抛出异常
   */
  @SuppressWarnings("rawtypes")
  public static <T> List<T> query(Class<T> beanClass, String sql,
      Object... params) throws SQLException {
      return (List<T>) _runner.query(getConnection(), sql,
                _IsPrimitive(beanClass) ? _columnListHandler
                        : new BeanListHandler(beanClass), params);
  }

  /**
   * 执行统计查询语句
   * @param sql 数据库sql语句
   * @param params sql中的参数
   * @return 统计结果(只返回一个数值)
   * @throws SQLException 数据库出错时抛出异常
   */
  public static long stat(String sql, Object... params) throws SQLException {
      Number num = (Number) _runner.query(getConnection(), sql,
                _scaleHandler, params);
        return (num != null) ? num.longValue() : -1;
  }

  /**
   * 执行INSERT/UPDATE/DELETE语句
     * @param sql 数据库sql语句
     * @param params sql中的参数
     * @return 成功:返回受影响的行数
   * @throws SQLException 修改数据库数据出错时抛出异常
   */
  public static int update(String sql, Object... params) throws SQLException {
    return _runner.update(getConnection(), sql, params);
  }
}
TOP

Related Classes of com.firefly.db.QueryHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.