使用 JDBC 和 JavaTemplate 查询SQL语句返回 List<Map<String,Object>>
使用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>>的更多相关文章
- oracle 连接数据库并查询,返回List<Map<String, Object>> 数据
package JDBC; import java.sql.Clob; import java.sql.Connection; import java.sql.DriverManager; impor ...
- jpa返回List<Map<String, Object>>相当于jdbctemplate的queryForlist
public class Test(){ @PersistenceContext(unitName = "manageFactory") protected EntityManag ...
- 多条查询sql语句返回多表数据集
+ + "';SELECT ProductID,ProductTitle,ProductName,SalePrice,ListingPrice,MainPicture,SaledItemCo ...
- 分页查询和分页缓存查询,List<Map<String, Object>>遍历和Map遍历
分页查询 String sql = "返回所有符合条件记录的待分页SQL语句"; int start = (page - 1) * limit + 1; int end = pag ...
- 查询sql语句所花时间
--1:下面这种是SQL Server中比较简单的查询SQL语句执行时间方法,通过查询前的时间和查询后的时间差来计算的: declare @begin_date datetime declare @e ...
- Entity Framework执行Sql语句返回DataTable
Entity Framework中对外开放了数据库连接字符串,使用的时候可以直接得到这个连接字符串,然后进行相关的操作.如果在使用的过程中,发现Entity Framework中有一些满足不了的需求的 ...
- 多表查询sql语句
多表查询sql语句 1 --解锁SCOTT用户 2 alter user scott account unlock 3 --检索指定的列 4 select job,ename,empno from e ...
- mysql 中字符串拼接,查询sql语句总结
DELIMITER $$ USE `ld_wpfmgl_sys`$$ DROP PROCEDURE IF EXISTS `code_query`$$ CREATE DEFINER=`root`@`%` ...
- 跨服务器查询sql语句样例
若2个数据库在同一台机器上:insert into DataBase_A..Table1(col1,col2,col3----)select col11,col22,col33-- from Data ...
随机推荐
- Redis Sentinel机制与用法说明【转】
本文来自:https://segmentfault.com/a/1190000002680804 概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Ma ...
- go:系统参数or函数--未完
系统参数: os.Args 存放命令参数的字符串数组,其中os.Arg[0]为命令本身的路径,其余项存放输入的参数 例:$ go run myapp.exe -d /home os.Args[0]: ...
- JS函数节流
背景:在前端开发中,有时会为页面绑定resize事件,或为一个页面元素拖拽事件(其核心就是绑定mousemove)在一个正常操作中也有可能在一个短时间内触发非常多次事件绑定程序,而DOM操作是很消耗性 ...
- php curl 例子
get方式: set_time_limit(0); $url ='http://xxxxxxxx?pwd=wJ2312&s=1&e=2&d=1&t=asc ...
- RHCS 6.5 由于resource-agents-3.9.2-40.el6版本过低导致rgmanager[61164]: [fs] umount failed - REBOOTING问题的解决
問題描述: RHEL 6.5版本RHCS在disable或者relocate service的時候,會導致節點重啟,查看日誌顯示umount掛载點失敗,日誌如下: Nov 29 16:03:50 ph ...
- VS2012 自动为类文件添加头注释
1. 打开文件夹 %VS110COMNTOOLS%..\IDE\ItemTemplates\CSharp\Code\1033\Class 2. 打开 Class.cs 文件,在其中添加 public ...
- ASP.NET4.5Web API及非同步程序开发系列(2)
认识ASP.NET WEB API 他的前身为WCF WEB API用于协助WCF支持RestFul.现在集成进ASP.NET,正式更名为ASP.NET WEB API,ASP.NET Web API ...
- 各种解析漏洞获取Webshell
各种解析漏洞拿shell 一.IIS 6.0解析漏洞 IIS 6.0解析利用方法有两种1.目录解析/xx.asp/xx.jpg2.文件解析wooyun.asp;.jpg第一种,在网站下建立文件夹的名 ...
- C#写入和读出文本文件
C#写入和读出文本文件 写入文本文件 class WriteTextFile { static void Main() { //如果文件不存在,则创建:存在则覆盖 //该方法写入字符数组换行显示 st ...
- asp.net c# 网上搜集面试题目大全(附答案)
1.String str=new String("a")和String str = "a"有什么区别? String str = "a"; ...