我自己的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 ...
随机推荐
- 从0开始搭建开发环境 -实现servlet原生开发
开发环境: JDK1.8 + Servlet + Mysql 搭建项目 项目搭建参考博客 https://www.cnblogs.com/oyww-2027/p/15347137.html File ...
- linux-debian-把用户加入root组
使用vim进入 /etc/sudoers 打开这个文件(或者 vi)也行 修改数据: 敲击键盘上个的 i 就可以键入字符了, 在root = ALL(ALL:ALL) ALL 的下面敲击 用户 ...
- MAKEFILE的学习
Makefile/cmake/configure 重点学习Cmake 首先是简单的MakeFile入门 1.1 简单Makefile 范例1.1 all: @echo "Hello all& ...
- KTL 一个支持C++14编辑公式的K线技术工具平台 - 第八版,数据解析。附带通达信gbbq解码。
K,K线,Candle蜡烛图. T,技术分析,工具平台 L,公式Language语言使用c++14,Lite小巧简易. 项目仓库:https://github.com/bbqz007/KTL 国内仓库 ...
- 编译器与Makefile
编译器与Makefile 目录 编译器与Makefile gcc/g++/clang clang gcc g++ 编译器过程 Makefile 什么是Makefile Makefile规则 变量 in ...
- 一个简单的RTMP服务器实现 --- RTMP复杂握手(Complex Handshake)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- [mysql/docker] 基于Docker安装MYSQL
0 序 虽然关于 mysql 安装的教程,先前已写过很多期了(参见如下列表),但这期的安装教程所依赖的环境还是大有不同的----基于 docker 环境. [数据库] MySQL之数据库备份与升级:M ...
- CSS(相对定位relative、绝对定位absolute、固定定位fixed、定位应用、元素的显示和隐藏)
一. 定位(position) 介绍 1.1 为什么使用定位 我们先来看一个效果,同时思考一下用标准流或浮动能否实现类似的效果? 场景1: 某个元素可以自由的在一个盒子内移动位置,并且压住其他盒子. ...
- 深度观察2024中国系统架构师大会(SACC)
今年的中国系统架构师大会(SACC)在我所在的城市广州举办,很荣幸受邀参加.这次能接触到国内最优秀的架构师,学习他们的架构思想和行业经验.对我而言非常有意义. 大会分为上下午共4场,我参加了上午的多云 ...
- linux安装jdk压缩包版
1.下载压缩包可以选择国内大厂的jdk镜像网站下载速度很快, 比如华为的:https://repo.huaweicloud.com/java/jdk/ 2.查看Linux系统是否有自带的jdk: 输入 ...