我自己的JdbcTemplate
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import javax.sql.DataSource; import org.apache.catalina.tribes.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.alibaba.fastjson.JSONObject; public class JdbcTemplate {
private static Logger logger = LoggerFactory.getLogger(JdbcTemplate.class);
private DataSource ds; public DataSource getDataSource() {
return ds;
} public void setDataSource(DataSource ds) {
this.ds = ds;
} JdbcTemplate() {
} public JdbcTemplate(DataSource ds) {
setDataSource(ds);
} public List<Map<String, Object>> queryForList(String sql, Object... args) {
Connection con = null;
try {
logger.info(sql);
logger.info(Arrays.toString(args));
con = ds.getConnection();
con.setAutoCommit(false);
PreparedStatement ps = con.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);
}
ResultSet rs = ps.executeQuery();
return convertResult(rs);
} catch (SQLException e) {
logger.error(e.getMessage());
try {
con.close();
} catch (SQLException e1) {
logger.error(e1.getMessage());
}
} finally {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
logger.error(e.getMessage());
}
}
}
return null; } public Map<String, Object> queryForMap(String sql, Object... param) {
List<Map<String, Object>> lst = queryForList(sql, param);
return lst != null && lst.size() > 0 ? lst.get(0) : new HashMap<String, Object>();
} public <T> T queryForObject(String sql, Class<T> clazz, Object... param) {
T obj = null;
if (clazz == null) {
return obj;
} else {
Map<String, Object> map = queryForMap(sql, param);
if (map != null && map.size() > 0) {
try {
if (clazz.getName().startsWith("java.util") || clazz.getName().startsWith("java.lang")) {
for (Entry<String, Object> en : map.entrySet()) {
if (en.getValue() == null) {
continue;
} Class<?> c = en.getValue().getClass();
if (c == clazz || c.isAssignableFrom(clazz) || clazz.isAssignableFrom(c)) {
String s = en.getValue().toString();
obj = JSONObject.parseObject(s, clazz);
return obj;
}
}
} else {
obj = JSONObject.parseObject(JSONObject.toJSONString(map), clazz);
return obj;
}
} catch (Exception e) {
logger.error(e.getMessage());
}
}
}
return obj;
} public int queryForUpdate(String sql, Object... args) {
int count = 0;
Connection con = null;
try {
con = ds.getConnection();
con.setAutoCommit(false);
PreparedStatement ps = con.prepareStatement(sql);
if (args != null) {
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);
}
}
count = ps.executeUpdate();
con.commit();
con.close();
} catch (SQLException e) {
logger.error(e.getMessage());
}
return count;
} public int queryForBatchUpdate(String sql, String[]... argsArray) {
int count = 0;
Connection con = null;
try {
con = ds.getConnection();
con.setAutoCommit(false);
PreparedStatement ps =con.prepareStatement(sql);
if (argsArray != null) {
for (int i = 0; i < argsArray.length; i++) {
String[] args = argsArray[i];
for (int j = 0; j < args.length; j++) {
ps.setObject(j+ 1, args[j]);
}
ps.addBatch();
}
} int[] arr = ps.executeBatch();
for (int i : arr) {
count += i;
}
con.commit();
con.close();
} catch (SQLException e) {
logger.error(e.getMessage());
}
return count;
} public int queryForBatchUpdate(String sql, List<String[]> argsArray) {
int count = 0;
Connection con = null;
try {
con = ds.getConnection();
con.setAutoCommit(false);
PreparedStatement ps =con.prepareStatement(sql);
if (argsArray != null) {
for (int i = 0; i < argsArray.size(); i++) {
String[] args = argsArray.get(i);
for (int j = 0; j < args.length; j++) {
ps.setObject(j + 1, args[j]);
}
ps.addBatch();
}
} int[] arr = ps.executeBatch();
for (int i : arr) {
count += i;
}
con.commit();
ps.close();
con.close();
} catch (SQLException e) {
logger.error(e.getMessage());
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
queryForBatchUpdate(sql, argsArray);
}
return count;
} public static List<Map<String, Object>> convertResult(ResultSet rs) {
List<Map<String, Object>> lst = new LinkedList<>();
if (rs == null)
return lst; try {
// 得到结果集(rs)的结构信息,比如字段数、字段名等
ResultSetMetaData md = rs.getMetaData(); // 返回此 ResultSet 对象中的列数
int columnCount = md.getColumnCount(); Map<String, Object> rowData = new LinkedHashMap<>();
while (rs.next()) {
rowData = new LinkedHashMap<>(columnCount);
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));
}
lst.add(rowData);
}
rs.close();
} catch (SQLException e) {
logger.error(e.getMessage());
}
return lst;
}
}
我自己的JdbcTemplate的更多相关文章
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
- Spring JdbcTemplate
参考链接: https://my.oschina.net/u/437232/blog/279530 http://jinnianshilongnian.iteye.com/blog/1423897 J ...
- jdbcTemplate批量插入(添加)
public void addSubscibe(List<PermedipUserSubscribeVo> list) { final List<PermedipUserSubscr ...
- 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】
一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...
- Spring MVC篇二、使用JdbcTemplate进行数据库操作
上一篇只是一个简单的Spring MVC框架,接下来添加一些跟数据库的交互. 一.添加jdbc相关配置 在maven中添加相关依赖后,配置数据库访问参数及数据源.数据库参数使用配置文件,代码如下: ...
- 使用Spring JdbcTemplate实现数据库操作
今天我来演示 关于JDBCTemplate实现对数据库的查询和添加 首先是添加 第一步大家都知道 创建一个实体类 然后写一个方法 把实体类当参数传进去 在实现这个接口 JdbcDaoSupport这个 ...
- JdbcTemplate进行查询
1.jdbcTemplate.queryForInt() 和 jdbcTemplate.queryForLong() 例如:下面使用queryForInt()方法传回user表中的记录数: jdbcT ...
- jdbcTemplate之jdbc模板技术
1:为什么要使用jdbcTemplate? 在实际开发中使用jdbc技术太过复杂,为了减少代码冗余,操作简单 步骤一:创建实体类 package beans; public class Book { ...
- Spring JdbcTemplate 方法详解
JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...
- Spring中的JdbcTemplate使用
1.引出SpringJDBC的概念 在学习JDBC编程时我们会感觉到JDBC的操作是多么繁琐,那么当我们学习的Hibernate框架时,我们感觉到数据库的操作也变非常简单,提高了开发效率.但是当使用H ...
随机推荐
- Python面向对象之派生和组合
[一]什么是派生 派生是指,子类继承父类,派生出自己的属性与方法,并且重用父类的属性与方法 [二]派生的方法 子类可以派生出自己新的属性,在进行属性查找时,子类中的属性名会优先于父类被查找 例如每个老 ...
- sentienl
整合springboot Spring Cloud Alibaba Sentinel 下载 导入依赖 <dependency> <groupId>com.alibaba.clo ...
- 音乐分层软件 spectralayers7 扒歌 简直就是黑科技
音乐分层软件 spectralayers7 扒歌 简直就是黑科技
- 【深度学习基础】基于Numpy的循环神经网络实现和反向传播训练
本文是<深度学习进阶:自然语言处理>.<神经网络与深度学习>和<动手学深度学习>的读书笔记.本文将介绍基于Numpy的循环神经网络的前向传播和反向传播实现,包括RN ...
- 基于DSP的设备振动信号的采集和处理模块研发总结
前记 在能源领域,由于很多地方都是无人值守,设备故障检测是一个必须面对的问题.笔者通过最近几个行业案例了解到,由于很多设备发生故障时候会产生特定频谱的声音,所以该行业对振动监测的需求特别强烈,由于涉 ...
- Android 线性布局平分宽度item的隐藏问题
原文:Android 线性布局平分宽度item的隐藏问题 - Stars-One的杂货小窝 一直只使用layout_weight来平分布局,但是如果隐藏了某个item,会导致其他item宽高有所变化 ...
- MAKEFILE的学习
Makefile/cmake/configure 重点学习Cmake 首先是简单的MakeFile入门 1.1 简单Makefile 范例1.1 all: @echo "Hello all& ...
- Java Spring Redis 如何向Set中添加List?
调用list.toArray方法将list转成数组,再使用add方法参数传入数组,即可批量添加. redisTemplate.opsForSet().add(key,collect.toArray(n ...
- drf(分页、IP限制用户频率、自动生成文档、RBAC、django缓存)
一 分页 settings.py REST_FRAMEWORK = {'PAGE_SIZE': 2, } views.py # 分页 from rest_framework.pagination im ...
- R语言安装教程
R 语言官方网站:The Comprehensive R Archive Network 官方镜像站列表:CRAN - Mirrors 一.官网下载R安装包 下载地址为:Index of /bin 进 ...