我(初学)用java和jdbc来操作mysql,
想把查询到的数据结果返回回去?下面的函数也实现了想我的功能,
但是我觉得,写得很low,
哪位大神麻烦看看,怎么改进一下返回类型?
/**
   * 通过sql语句查询数据
   * @param  sql  
   * @return     [description]
   */
  public List<Map<String,String>> query(String sql){
    List<Map<String,String>> lists=new ArrayList<Map<String,String>>();
    try {    
            
            conn = DriverManager.getConnection(url, user, password);
            statement = conn.createStatement();
            ResultSet rs = statement.executeQuery(sql);
            lists=this.ResultSetToList(rs);
            rs.close();
            conn.close();
            return lists;
       }  catch(Exception e) {
            e.printStackTrace();
       }   
   return lists;
  }  /**
   * 把结果转化成list返回
   * @param  rs  
   * @return    [description]
   */
  public static List<Map<String,String>> ResultSetToList(ResultSet rs) {
        try {
            ResultSetMetaData md = rs.getMetaData();    // 获得结果集结构信息(字段数、字段名等)
            int columnCount = md.getColumnCount();
            List<Map<String,String>> list = new ArrayList<Map<String,String>>();
            while (rs.next()) {
                Map<String, String> rowData = new HashMap<String, String>();
                for (int i = 1; i <= columnCount; i++) {
                    rowData.put(md.getColumnName(i), rs.getString(i));
                }
                list.add(rowData);
            }
            return list;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

解决方案 »

  1.   

    可以 List<Bean>
    bean 是你实体类名,比如List<User>可以直接返回user 的list 注意,sql 和字段的对应
      

  2.   

    提出一点修正意见,应该在finally中关闭 con等数据库连接对象,因为如果操作中发生异常,而你的异常中又没有关闭代码,然后你懂的。另外,初学者写成这样,知道抽象方法来复用代码,表示
      

  3.   

    写的已经挺好了,多理解下面向对象,当然反正也不着急,写多了自然就明白了。
    3l说的挺对,关闭资源一定要放在finally里,这个是个坑。
    然后数据库连接可以单独抽象出来,做个静态的连接,关闭连接也可以单独抽象出来,这样结构清楚,主函数一眼可以看出干啥的。