我自己的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 ...
随机推荐
- vscode复制相对路径时是反斜杠\,改为正斜杠/ [转]
痛点:复制路径的时候斜杠不对 解决:explorer.copyRelativePathSeparator 设置 在跳出来的设置页面的搜索栏里输入explorer.copyRelativePathSep ...
- dangle = dance + toggle - dan 向上跳 gle 摆动
dangle = dance + toggle - dan 向上跳 gle 摆动 dangle 英 [ˈdæŋɡl] 美 [ˈdæŋɡl] v.悬垂;悬挂;悬荡;悬摆;提着(某物,任其自然下垂或摆动) ...
- 50HZ陷波器的原理和实物开发设计
原理 陷波滤波器指的是一种可以在某一个频率点迅速衰减输入信号,以达到阻碍此频率信号通过的滤波效果的滤波器.陷波滤波器属于带阻滤波器的一种,只是它的阻带非常狭窄,起阶数必须是二阶(含二阶)以上. ...
- ETL工具-KETTLE教程实例实战3----转换(输入、输出)
ETL工具-KETTLE教程实例实战3----转换(输入.输出) 欢迎关注笔者的公众号: java大师, 每日推送java.kettle运维等领域干货文章,关注即免费无套路附送 100G 海量学习.面 ...
- Java-求根号n
平方,开根号在java中是很简单的,Math.sqrt(double n)或者 Math.pow(double a, double b),求a的b次方.但是我们可以自己想想,这些方法到底是怎么实现的. ...
- Clang RecursiveASTVisitor & ASTFrontendActions based on it
RecursiveASTVisitor Basics 类声明 template<typename Derived> class clang::RecursiveASTVisitor< ...
- 【Jenkins】Jenkins 运行权限问题
yum安装的Jenkins 配置文件默认位置/etc/sysconfig/jenkins 默认jenkins服务以jenkins用户运行,这时在jenkins执行maven脚本时可能会发生没有权限操作 ...
- FPGA的PCB设计
FPGA的PCB设计 一.FPGA的高速电路板设计 PCB板的设计规模增大,IO传输问题也就出现.为了兼容其他高速模块,必须对PCB的设计进行优化. 1️⃣电源滤波,降低系统噪声2️⃣匹配信号线3️⃣ ...
- 鸿蒙HarmonyOS实战-ArkUI组件(Grid/GridItem)
一.Grid/GridItem 1.概述 网格布局是一种新型的布局方式,它按照网格来划分页面,通过列和行来定义网格,使得页面的布局更加灵活.简洁.易于维护.网格布局能够将页面分成多个单元格,可以在这些 ...
- Java字符数组char和字符串String互相转化
字符串转换为数组 1 String str = "123abc"; 2 char[] arr = str.toCharArray(); // char数组 3 for (int i ...