JDBC通用查询经典实例(应用)

<span style="font-size:12px;">import java.math.BigDecimal;  
import java.sql.Clob;  
import java.sql.Date;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.ResultSetMetaData;  
import java.sql.SQLException;  
import java.sql.Time;  
import java.sql.Timestamp;  
import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
  
/** 
 * @描述:利用jdbc进行常见的查询 
 * @author richersky 
 * @日期:2010-06-27 
 */  
public class EntityDaoImplJdbc {  
      
    private String datasourse;  
      
    /** 
     * 根据sql语句查询数据 
     * @param sql 
     * @param page 
     * @return 
     * @throws Exception 
     */  
    public Page findSql(String sql, Page page) throws Exception{  
        JdbcUtil jdbcUtil = null;  
        try {  
            StringBuffer ssql = new StringBuffer();  
            ssql.append(sql);  
            //获取条件对应的值集合  
            List valueList = page.getValues();  
            LogUtil.infoSql(EntityDaoImplJdbc.class,valueList,"SQL语句:",ssql.toString());  
            jdbcUtil = new JdbcUtil(datasourse);  
            PreparedStatement preparedStatement = jdbcUtil.createPreparedStatement(ssql.toString());  
            int liSQLParamIndex = 1;  
            if(valueList!=null){  
                for(int i=0;i<valueList.size();i++){  
                    Object obj = valueList.get(i);  
                    this.setParameterValue(preparedStatement, i+1, obj);  
                    liSQLParamIndex++;  
                }  
            }  
              
            ResultSet rs = preparedStatement.executeQuery();  
            List<Map<String,Object>> dataList = new ArrayList<Map<String,Object>>();  
            Map<String,Integer> metaDataMap = null;  
            while(rs.next()){  
                if(rs.isFirst()){  
                    metaDataMap = this.getMetaData(rs);  
                }  
                dataList.add(this.setData(rs,metaDataMap));  
            }  
            page.setDataList(dataList);  
        }catch (Exception e) {  
            LogUtil.error(this.getClass(), e,"利用jdbc进行查询时出错!");  
            throw e;  
        }finally{  
            if(jdbcUtil!=null){  
                jdbcUtil.freeCon();  
            }  
        }  
        return page;  
    }  
      
    /** 
     * 根据sql查询出单条记录 
     * @param sql 
     * @return Map<String,Object> 
     * @throws Exception  
     */  
    public Map<String,Object> findUniqueBySql(String sql,List<Object> valueList) throws Exception{  
        JdbcUtil jdbcUtil = null;  
        Map<String,Object> map = null;  
        try {  
            LogUtil.infoSql(EntityDaoImplJdbc.class,valueList,"SQL语句:",sql);  
            jdbcUtil = new JdbcUtil(datasourse);  
            PreparedStatement preparedStatement= jdbcUtil.createPreparedStatement(sql);  
            if(valueList!=null){  
                for(int i=0;i<valueList.size();i++){  
                    Object obj = valueList.get(i);  
                    this.setParameterValue(preparedStatement, i+1, obj);  
                }  
            }  
            ResultSet rs = preparedStatement.executeQuery();  
            Map<String,Integer> metaDataMap = null;  
            if(rs.next()){  
                metaDataMap = this.getMetaData(rs);  
                map = this.setData(rs,metaDataMap);  
            }  
        }catch (Exception e) {  
            LogUtil.error(this.getClass(), e,"利用jdbc进行查询时出错!");  
            throw e;  
        }finally{  
            if(jdbcUtil!=null){  
                jdbcUtil.freeCon();  
            }  
        }  
        return map;  
    }  
      
    /** 
     * 设置PreparedStatement预处理sql语句的值 
     * @param pStatement 
     * @param piIndex 
     * @param pValueObject 
     * @throws Exception 
     */  
    private void setParameterValue(PreparedStatement pStatement, int piIndex,Object pValueObject) throws Exception {  
        if (pValueObject instanceof String) {  
            pStatement.setString(piIndex, (String) pValueObject);  
        } else if (pValueObject instanceof Boolean) {  
            pStatement.setBoolean(piIndex, ((Boolean) pValueObject).booleanValue());  
        } else if (pValueObject instanceof Byte) {  
            pStatement.setByte(piIndex, ((Byte) pValueObject).byteValue());  
        } else if (pValueObject instanceof Short) {  
            pStatement.setShort(piIndex, ((Short) pValueObject).shortValue());  
        } else if (pValueObject instanceof Integer) {  
            pStatement.setInt(piIndex, ((Integer) pValueObject).intValue());  
        } else if (pValueObject instanceof Long) {  
            pStatement.setLong(piIndex, ((Long) pValueObject).longValue());  
        } else if (pValueObject instanceof Float) {  
            pStatement.setFloat(piIndex, ((Float) pValueObject).floatValue());  
        } else if (pValueObject instanceof Double) {  
            pStatement.setDouble(piIndex, ((Double) pValueObject).doubleValue());  
        } else if (pValueObject instanceof BigDecimal) {  
            pStatement.setBigDecimal(piIndex, (BigDecimal) pValueObject);  
        } else if (pValueObject instanceof Date) {  
            pStatement.setDate(piIndex, (Date) pValueObject);  
        } else if (pValueObject instanceof Time) {  
            pStatement.setTime(piIndex, (Time) pValueObject);  
        } else if (pValueObject instanceof Timestamp) {  
            pStatement.setTimestamp(piIndex, (Timestamp) pValueObject);  
        } else {  
            pStatement.setObject(piIndex, pValueObject);  
        }  
    }  
  
    /** 
     * 根据传入的结果集返回结果集的元数据,以列名为键以列类型为值的map对象 
     * @param rs 
     * @return  
     * @throws SQLException 
     */  
    private Map<String,Integer> getMetaData(ResultSet rs) throws SQLException{  
        Map<String,Integer> map = new HashMap<String,Integer>();  
        ResultSetMetaData metaData = rs.getMetaData();  
        int numberOfColumns =  metaData.getColumnCount();  
        for(int column = 0; column < numberOfColumns; column++) {  
            String columnName = metaData.getColumnLabel(column+1);  
            int colunmType = metaData.getColumnType(column+1);  
            columnName = columnName.toLowerCase();  
            map.put(columnName, colunmType);  
        }  
        return map;  
    }  
      
    /** 
     * 将结果集封装为以列名存储的map对象 
     * @param rs 
     * @param metaDataMap元数据集合 
     * @return 
     * @throws Exception 
     */  
    private Map<String,Object> setData(ResultSet rs,Map<String,Integer> metaDataMap) throws Exception {  
        Map<String,Object> map = new HashMap<String,Object>();  
        for (String columnName : metaDataMap.keySet()) {  
            int columnType = metaDataMap.get(columnName);  
            Object object = rs.getObject(columnName);  
            if(object==null){  
                map.put(columnName, null);  
                continue;  
            }  
            //以下并为对所有的数据类型做处理,未特殊处理的数据类型将以object的形式存储。  
            switch (columnType) {  
            case java.sql.Types.VARCHAR:  
                map.put(columnName, object);  
                break;  
            case java.sql.Types.DATE:  
                map.put(columnName, DateUtil.format(object.toString()));  
                break;  
            case java.sql.Types.TIMESTAMP:  
                map.put(columnName, DateUtil.format(object.toString()));  
                break;  
            case java.sql.Types.TIME:  
                map.put(columnName, DateUtil.format(object.toString()));  
                break;  
            case java.sql.Types.CLOB:  
                try{  
                    if(object!=null){  
                        Clob clob = (Clob)object;  
                        long length = clob.length();  
                        map.put(columnName, clob.getSubString(1L, (int)length));  
                    }  
                }catch(Exception e){  
                    LogUtil.error(this.getClass(), e,"将字段值从clob转换为字符串时出错@!");  
                }  
                break;  
            case java.sql.Types.BLOB:  
                map.put(columnName, "");  
                break;  
            default:  
                map.put(columnName, object);  
                break;  
            }  
        }  
        return map;  
    }  
}  </span>
其他实例: http://www.cnblogs.com/shellway/p/3938212.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值