java根据sql查询数据封装成listmap集合

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

/**
     * @$comment 查询 (较高频率的执行拼接sql,会降低数据并发性能
     * @param sql  -- 拼接sql  如: select * from test where id='1111111'
     * @return List<HashMap>
     */
    public static List<HashMap<String, Object>> getListSql(Connection conn,String sql) throws SQLException {
        List<HashMap<String, Object>> list=new java.util.ArrayList<HashMap<String, Object>>();
        Statement stmt=null;
        ResultSet rs=null;
        ResultSetMetaData rsmd=null;
        int cols;
        try{
            stmt=conn.createStatement();
            rs=stmt.executeQuery(sql);
            rsmd=rs.getMetaData();
            cols=rsmd.getColumnCount();
            while(rs.next()){
                HashMap<String,Object> hm=new HashMap<String,Object>();
                for(int j=1;j<=cols;j++){
                    hm.put((rsmd.getColumnName(j)).toLowerCase(),rs.getString(j));
                }

                list.add(hm);
            }
            if(rs!=null) rs.close();
            if(stmt!=null) stmt.close();
            if(conn!=null) conn.close();
        }catch(Exception e){
            try{
                if(rs!=null) rs.close();
                if(stmt!=null) stmt.close();
                if(conn!=null) conn.close();
            }catch(Exception e1){
                
            }
            throw new SQLException(e);
        }
        return list;        
    }

/**
     * @$comment 查询 (对于简单的查询语句,推荐使用此方式执行sql查询
     * @param sql  -- 占位符sql  如: select * from test where id=?

     * @param objs  ---new Object[]{"123456"}
     * @return List<HashMap>
     */
    public static List<HashMap<String, Object>> getListSql(Connection conn,String sql,Object[] objs) throws SQLException {
        List<HashMap<String, Object>> list=new java.util.ArrayList<HashMap<String, Object>>();
       PreparedStatement pst = null;
        ResultSet rs=null;
        ResultSetMetaData rsmd=null;
        int cols;
        try{
           pst=conn.prepareStatement(sql);

           for(int i=0;i<objs.length;i++) {
                initValue( objs[i], pst,i+1);
            }
           rs=pst.executeQuery();
            rsmd=rs.getMetaData();
            cols=rsmd.getColumnCount();
            while(rs.next()){
                HashMap<String,Object> hm=new HashMap<String,Object>();
                for(int j=1;j<=cols;j++){
                    hm.put((rsmd.getColumnName(j)).toLowerCase(),rs.getString(j));
                }

                list.add(hm);
            }
            if(rs!=null) rs.close();
            if(pst!=null) pst.close();
            if(conn!=null) conn.close();
        }catch(Exception e){
            try{
                if(rs!=null) rs.close();
                if(pst!=null) pst.close();
                if(conn!=null) conn.close();
            }catch(Exception e1){
                
            }
            throw new SQLException(e);
        }
        return list;        
    }

/**
     * 初始化参数
     * @throws NumberFormatException
     * @throws SQLException
     */
    public   int initValue(Object v,PreparedStatement pst,int i) throws NumberFormatException, SQLException {
        if(v==null) {
            pst.setObject(i, null);
        }else if(v instanceof String) {
            pst.setString(i, v.toString());
        }else if(v instanceof Long) {
            pst.setLong(i, Long.valueOf(v.toString()));
        }else if(v instanceof Short) {
            pst.setShort(i, Short.valueOf(v.toString()));
        }else if(v instanceof Boolean) {
            pst.setBoolean(i, Boolean.valueOf(v.toString()));
        }else if(v instanceof Double) {
            pst.setDouble(i, Double.valueOf(v.toString()));
        }else if(v instanceof Float) {
            pst.setFloat(i, Float.valueOf(v.toString()));
        }else {
            pst.setObject(i, v);
        }
        return 1;
    }

注意:有变量参数的sql语句,应该使用占位符(?)或者绑定变量(:id) 的sql形式执行,没有特殊要求或情况应禁止使用拼接sql,可防止数据库资源消耗过大等

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值