使用JDBC执行sql语句返回List 类型:

public class JdbcUtil {
    private static Log log = LogFactory.getLog(JdbcUtil.class);
    public static Connection getConnection(String driverClassName, String url, String username, String password) {
        Connection connection = null;
        try {
            Class.forName(driverClassName);
            connection = DriverManager.getConnection(url, username, password);
            return connection;
        } catch (ClassNotFoundException e) {
            log.error("error message:" + e.getMessage());
            e.printStackTrace();
            return null;
        } catch (SQLException e) {
            log.error("error message:" + e.getMessage());
            e.printStackTrace();
            return null;
        }
    }

    public static List<Map<String, Object>> execQuerySql(String driverClassName, String url, String username, String password, String sql) {
        Connection connection = JdbcUtil.getConnection(driverClassName, url, username, password);
        Statement statement = null;
        ResultSet rs = null;
        List<Map<String, Object>> rsList = null;
        try {
            //参考:http://www.sitesbay.com/jdbc/jdbc-scrollable-resultset.php
            statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = statement.executeQuery(sql);
            if (rs.getType() == ResultSet.TYPE_FORWARD_ONLY) {
                log.error("error message: ResultSet non-scrollable.");
                return null;
            }
            rs.last();
            int rsRows = rs.getRow();
            rsList = new ArrayList<>();
            for (int i = 0; i < rsRows; i++) {
                rs.absolute(i + 1);
                Map<String, Object> rsMaps = new HashMap<>();
                ResultSetMetaData resultSetMetaData = rs.getMetaData();
                int columnCount = resultSetMetaData.getColumnCount();
                for (int j = 0; j < columnCount; j++) {
                    String columnLable = resultSetMetaData.getColumnLabel(j + 1);
                    Object columnValue = rs.getObject(j + 1);
                    rsMaps.put(columnLable, columnValue);
                }
                rsList.add(rsMaps);
            }
            return rsList;
        } catch (SQLException e) {
            log.error("error message:" + e.getMessage());
            e.printStackTrace();
            return null;
        } finally {
            try {
                if (statement != null) {
                    if (!statement.isClosed()) {
                        statement.close();
                    }
                }
                if (connection != null) {
                    if (!connection.isClosed()) {
                        connection.close();
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
} 

上面的代码问题是返回的Map中的键是英文全大写(如何解决?求解),例如:

 {"ID": 1,"USERNAME": "user"}

还可以使用JavaTemplate中封装的方法来执行sql语句返回List:

public class JdbcUtil{
    public static JdbcTemplate getJdbcTemplate(String driverClassName, String url, String username, String password) {
        DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource(url, username, password);
        driverManagerDataSource.setDriverClassName(driverClassName));
        JdbcTemplate jdbcTemplate = new JdbcTemplate(driverManagerDataSource);
        return jdbcTemplate;
    }

    public static List<Map<String, Object>> execQuerySql(String driverClassName, String url, String username, String password, String sql) {
        JdbcTemplate jdbcTemplate = getJdbcTemplate(driverClassName, url, username, password);
        List<Map<String, Object>> mpList = null;
        /*JdbcTemplate封装了三个返回List<Map<String, Object>>对象的方法,可以直接调用
        List<Map<String, Object>> queryForList(String sql, Object[] args, int[] argTypes) throws DataAccessException;
        List<Map<String, Object>> queryForList(String sql, Object... args) throws DataAccessException;
        List<Map<String, Object>> queryForList(String sql) throws DataAccessException;
        */
        return mpList;
    }
}

使用 JDBC 和 JavaTemplate 查询SQL语句返回 List<Map<String,Object>>的更多相关文章

  1. oracle 连接数据库并查询,返回List<Map<String, Object>> 数据

    package JDBC; import java.sql.Clob; import java.sql.Connection; import java.sql.DriverManager; impor ...

  2. jpa返回List<Map<String, Object>>相当于jdbctemplate的queryForlist

    public class Test(){ @PersistenceContext(unitName = "manageFactory") protected EntityManag ...

  3. 多条查询sql语句返回多表数据集

    + + "';SELECT ProductID,ProductTitle,ProductName,SalePrice,ListingPrice,MainPicture,SaledItemCo ...

  4. 分页查询和分页缓存查询,List<Map<String, Object>>遍历和Map遍历

    分页查询 String sql = "返回所有符合条件记录的待分页SQL语句"; int start = (page - 1) * limit + 1; int end = pag ...

  5. 查询sql语句所花时间

    --1:下面这种是SQL Server中比较简单的查询SQL语句执行时间方法,通过查询前的时间和查询后的时间差来计算的: declare @begin_date datetime declare @e ...

  6. Entity Framework执行Sql语句返回DataTable

    Entity Framework中对外开放了数据库连接字符串,使用的时候可以直接得到这个连接字符串,然后进行相关的操作.如果在使用的过程中,发现Entity Framework中有一些满足不了的需求的 ...

  7. 多表查询sql语句

    多表查询sql语句 1 --解锁SCOTT用户 2 alter user scott account unlock 3 --检索指定的列 4 select job,ename,empno from e ...

  8. mysql 中字符串拼接,查询sql语句总结

    DELIMITER $$ USE `ld_wpfmgl_sys`$$ DROP PROCEDURE IF EXISTS `code_query`$$ CREATE DEFINER=`root`@`%` ...

  9. 跨服务器查询sql语句样例

    若2个数据库在同一台机器上:insert into DataBase_A..Table1(col1,col2,col3----)select col11,col22,col33-- from Data ...

随机推荐

  1. Metro下读取txt文件

    情况1:txt是Utf8格式的. 读取代码:IList<String> lines = await Windows.Storage.FileIO.ReadLinesAsync(file); ...

  2. js原生

    1.数组  shift unshift pop push 头删增         尾删增 // 数组 shift unshift pop push var str="a,b,c,d,e,f& ...

  3. 注解:【基于外键的】Hibernate双向1->1关联

    Person与Address关联:双向1->1,[基于外键的]. #主表不应该控制关联关系.(否则会导致生成额外的update语句,从而导致性能下降), #因此主表对应的实体中使用@OneToO ...

  4. Android onActivityResult没响应

    原因: 1.当MainActivity2的启动模式为SingleTask时, 系统为自动返回setResult(Activity.RESULT_CANCELED). 2.当为MainActivity2 ...

  5. 简单Excel表格上传下载,POI

    一.废话 Excel表格是office软件中的一员,几乎是使用次数最多的办公软件.所以在java进行企业级应用开发的时候经常会用到对应的上传下载便利办公. 目前,比较常用的实现Java导入.导出Exc ...

  6. getter & setter

    ECMAScript 5: setter和getter的使用方式: 1.set/get: var person = { _name: '', get name() { return this._nam ...

  7. tangram2.6(XE2)\Demo\notify\notifyGroup.groupproj

    1.以下此异常,为exe没有加载到Tangram_Core.bpl 放到exe当前文件夹下即可 2.此例子的接口实现在exe中,exe中下发通知到dll,dll 中 as 获取接口传窗体到exe中: ...

  8. 简单的网络引导安装CentOS7

    实验室有几台电脑,里边装有windows,因为实验需求要给其装入CentOS7.但是这几个电脑无法用U盘引导系统的安装,虽然带有光驱,但是又不想麻烦去买碟片,所以便想到用网络引导系统的安装. 1. 软 ...

  9. 51nod p1201 整数划分

    1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2, ...

  10. MD5 、 加密工具

    package com.cgcyiliao.server.util; import java.security.MessageDigest; import java.security.NoSuchAl ...