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

  1. public class JdbcUtil {
  2. private static Log log = LogFactory.getLog(JdbcUtil.class);
  3. public static Connection getConnection(String driverClassName, String url, String username, String password) {
  4. Connection connection = null;
  5. try {
  6. Class.forName(driverClassName);
  7. connection = DriverManager.getConnection(url, username, password);
  8. return connection;
  9. } catch (ClassNotFoundException e) {
  10. log.error("error message:" + e.getMessage());
  11. e.printStackTrace();
  12. return null;
  13. } catch (SQLException e) {
  14. log.error("error message:" + e.getMessage());
  15. e.printStackTrace();
  16. return null;
  17. }
  18. }
  19. public static List<Map<String, Object>> execQuerySql(String driverClassName, String url, String username, String password, String sql) {
  20. Connection connection = JdbcUtil.getConnection(driverClassName, url, username, password);
  21. Statement statement = null;
  22. ResultSet rs = null;
  23. List<Map<String, Object>> rsList = null;
  24. try {
  25. //参考:http://www.sitesbay.com/jdbc/jdbc-scrollable-resultset.php
  26. statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
  27. rs = statement.executeQuery(sql);
  28. if (rs.getType() == ResultSet.TYPE_FORWARD_ONLY) {
  29. log.error("error message: ResultSet non-scrollable.");
  30. return null;
  31. }
  32. rs.last();
  33. int rsRows = rs.getRow();
  34. rsList = new ArrayList<>();
  35. for (int i = 0; i < rsRows; i++) {
  36. rs.absolute(i + 1);
  37. Map<String, Object> rsMaps = new HashMap<>();
  38. ResultSetMetaData resultSetMetaData = rs.getMetaData();
  39. int columnCount = resultSetMetaData.getColumnCount();
  40. for (int j = 0; j < columnCount; j++) {
  41. String columnLable = resultSetMetaData.getColumnLabel(j + 1);
  42. Object columnValue = rs.getObject(j + 1);
  43. rsMaps.put(columnLable, columnValue);
  44. }
  45. rsList.add(rsMaps);
  46. }
  47. return rsList;
  48. } catch (SQLException e) {
  49. log.error("error message:" + e.getMessage());
  50. e.printStackTrace();
  51. return null;
  52. } finally {
  53. try {
  54. if (statement != null) {
  55. if (!statement.isClosed()) {
  56. statement.close();
  57. }
  58. }
  59. if (connection != null) {
  60. if (!connection.isClosed()) {
  61. connection.close();
  62. }
  63. }
  64. } catch (SQLException e) {
  65. e.printStackTrace();
  66. }
  67. }
  68. }
  69. }

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

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

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

  1. public class JdbcUtil{
  2. public static JdbcTemplate getJdbcTemplate(String driverClassName, String url, String username, String password) {
  3. DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource(url, username, password);
  4. driverManagerDataSource.setDriverClassName(driverClassName));
  5. JdbcTemplate jdbcTemplate = new JdbcTemplate(driverManagerDataSource);
  6. return jdbcTemplate;
  7. }
  8. public static List<Map<String, Object>> execQuerySql(String driverClassName, String url, String username, String password, String sql) {
  9. JdbcTemplate jdbcTemplate = getJdbcTemplate(driverClassName, url, username, password);
  10. List<Map<String, Object>> mpList = null;
  11. /*JdbcTemplate封装了三个返回List<Map<String, Object>>对象的方法,可以直接调用
  12. List<Map<String, Object>> queryForList(String sql, Object[] args, int[] argTypes) throws DataAccessException;
  13. List<Map<String, Object>> queryForList(String sql, Object... args) throws DataAccessException;
  14. List<Map<String, Object>> queryForList(String sql) throws DataAccessException;
  15. */
  16. return mpList;
  17. }
  18. }

使用 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. Mybatis Collection查询集合只出现一条数据

    1.原因 如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条. 2.解决办法 级联查询的时候,主表和从表有一样的字段名的时候,在mysql上命令查询是没问题的.但在mybat ...

  2. CUDA代码移植

    如果CUDA的代码移植,一个是要 include文件夹对不对,这个是.h文件能否找到的关键,另一个就是lib,这个是.lib文件能否找到的关键.具体检查地方,见下头. include: lib:

  3. xampp环境搭建+bugfree

    一.xampp安装 1.下载xampp安装文件,下载地址:http://pan.baidu.com/s/1eSp5wVw 2.上传到Linux服务器,执行赋权并安装(我安装在/opt目录下) 3.安装 ...

  4. Ubuntu16.04安装nginx

    //ubuntu //安装nginxcurl -LJO http://nginx.org/download/nginx-1.10.1.tar.gz tar zxvf nginx-1.10.1.tar. ...

  5. 【django】京东等大型网站的混合搜索是怎么实现的?

    混合搜索在各大网站如京东.淘宝都有应用,他们的原理都是什么呢?本博文将为你介绍它们的实现过程. 混合搜索的原理,用一句话来说就是:关键字id进行拼接. 混合搜索示例: 数据库设计: 视频方向: cla ...

  6. 复制Eclipse工作空间设置

    将新建的workspace下的.metadata.plugins内容全部删除: 将原来的workspace下的.metadata.plugins内容除了org.eclipse.core.resourc ...

  7. ASP.NET 你必须知道的EF知识和经验

    原文:http://www.cnblogs.com/zhaopei/p/5721789.html

  8. PDA移动POS终端系统,实现专柜或店铺的收货、零售、盘点通过无线网络直接连接总部中央数据库,实现高效安全的移动供应链管理

    利用PDA移动终端,实现专柜或店铺的收货.零售.盘点等一体化操作,通过无线网络直接连接总部中央数据库,实现高效安全的移动供应链管理. · PDA订货会应用解决方案利用PDA或电脑系统,在订货会现场直接 ...

  9. self.automaticallyAdjustsScrollViewInsets

    导航视图内Push进来的以“TableView”(没有ScrollView截图,就将就一下)为主View的视图,本来我们的cell是放在(0,0)的位置上的,但是考虑到导航栏.状态栏会挡住后面的主视图 ...

  10. LogPolar 对数极坐标

    LogPolar 对数极坐标 cvLogPolar 对数极坐标(logpolar)是仿真生物视网膜中央凹陷的特性,具有数据压缩的能力,可用于目标跟踪中快速尺度和旋转变换不变的模板匹配. 对数极坐标其实 ...