编写Java ResultSet的有效方法

时间:2016-10-04 22:03:05

标签: java resultset

我有大约40个Web服务,每个我都有以下代码来从数据库中获取结果。最多,我只从数据库中检索大约200行,比这少了很多倍。但是,一位开发人员告诉我,这段代码效率不高,尤其是getColumnName方法,这种方法很昂贵。我只是认为我会使用getColumnName作为关键,因为它是描述性的。是否有更有效的方式做同样的事情如下?如果是这样,我怎样才能提高效率呢?我应该研究哪种设计模式以使其更好?提前谢谢。

 try{
       ...
        //Open Db Connection
       ...
        ResultSet rs = stmt.executeQuery(QueryClass.getQuery());
        ResultSetMetaData rsmd = rs.getMetaData();
        int columnCount = rsmd.getColumnCount();

        while(rs.next()){
         HashMap<String, Object> map = new HashMap<String, Object>(columnCount);
          for (int i = 1; i <= columnCount; i++ ) {
            map.put(rsmd.getColumnName(i), rsmd.getObject(i));

        }

        //add to arraylist
        list.add(map);
        }
} catch(SQLException e){
  .....

}

1 个答案:

答案 0 :(得分:0)

如果您没有看到性能问题,那么仅出于效率原因,无需更改代码。如果您使用的结构对您有意义,那么您应该坚持下去。

您可能还需要考虑其他一些选项:

  1. 有一个单独的列名列表,您可以存储一次:

    List<String> columnNames;

    List<List<Object>> rowData;

  2. 按列而不是按行记录数据:

    Map<String, List<Object>> columnData;

  3. 通过定义可以使用适合于表的方法实现的接口来封装查询,如果遇到性能问题而无需更改接口,则可以更改实现。

  4. 例如:

    public interface Table {
        List<String> getColumnNames();
        Object getValue(String column, int row);
    }