记一次关于JDBCUtils工具类的编写
- jdbc.properties数据库配置的属性文件内容如下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/xxxxx?seUnicode=true&characterEncoding=UTF8
jdbc.username=root
jdbc.password=xxxxxx
- JDBCUtils工具类的代码如下
public class JDBCUtils {
private static final String JDBC_DRIVER;
private static final String JDBC_URL;
private static final String JDBC_USERNAME;
private static final String JDBC_PASSWORD;
static {
try (InputStream inputStream = JDBCUtils.class.getClassLoader().getResourceAsStream("com/zcl/jdbcutils/jdbc.properties")) {
Properties prop = new Properties();
prop.load(inputStream);
JDBC_DRIVER = prop.getProperty("jdbc.driver");
JDBC_URL = prop.getProperty("jdbc.url");
JDBC_USERNAME = prop.getProperty("jdbc.username");
JDBC_PASSWORD = prop.getProperty("jdbc.password");
// 加载驱动
Class.forName(JDBC_DRIVER);
} catch (Exception e) {
// 静态代码块中只能抛出运行时异常
throw new RuntimeException(e);
}
}
/**
* 创建连接
*
* @return
* @throws SQLException
*/
public static Connection createConnection() throws SQLException {
return DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);
}
/**
* 带连接的更新操作
*
* @param conn
* @param sql
* @param paras
* @return
* @throws SQLException
*/
public static int executeUpdate(Connection conn, String sql, Object... paras) throws SQLException {
PreparedStatement stmt = null;
try {
stmt = conn.prepareStatement(sql);
for (int i = 0; i < paras.length; ++i) {
stmt.setObject(i + 1, paras[i]);
}
return stmt.executeUpdate();
} finally {
closeQuietly(stmt);
}
}
/**
* 不带连接的更新操作
*
* @param sql
* @param paras
* @return
* @throws SQLException
*/
public static int executeUpdate(String sql, Object... paras) throws SQLException {
Connection conn = null;
try {
conn = createConnection();
return executeUpdate(conn, sql, paras);
} finally {
closeQuietly(conn);
}
}
/**
* 带连接的查询操作
*
* @param conn
* @param sql
* @param paras
* @return
* @throws SQLException
*/
public static ResultSet executeQuery(Connection conn, String sql, Object... paras) throws SQLException {
PreparedStatement stmt = conn.prepareStatement(sql);
for (int i = 0; i < paras.length; ++i) {
stmt.setObject(i + 1, paras[i]);
}
return stmt.executeQuery();
}
/**
* 不带连接的查询操作
*
* @param sql
* @param paras
* @return
* @throws SQLException
*/
public static ResultSet executeQuery(String sql, Object... paras) throws SQLException {
Connection conn = createConnection();
return executeQuery(conn, sql, paras);
}
/**
* 带连接的查询操作(一次性取出所有数据放入内存中)
*
* @param conn
* @param sql
* @param paras
* @return
* @throws SQLException
*/
public static CachedRowSet executeQueryToCachedRowSet(Connection conn, String sql, Object... paras) throws SQLException {
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = conn.prepareStatement(sql);
for (int i = 0; i < paras.length; ++i) {
stmt.setObject(i + 1, paras[i]);
}
rs = stmt.executeQuery();
RowSetFactory rowSetFactory = RowSetProvider.newFactory();
CachedRowSet crs = rowSetFactory.createCachedRowSet();
crs.populate(rs);
return crs;
} finally {
closeQuietly(rs);
closeQuietly(stmt);
}
}
/**
* 不带连接的查询操作(一次性取出所有数据放入内存中)
*
* @param sql
* @param paras
* @return
* @throws SQLException
*/
public static CachedRowSet executeQueryToCachedRowSet(String sql, Object... paras) throws SQLException {
Connection conn = null;
try {
conn = createConnection();
return executeQueryToCachedRowSet(conn, sql, paras);
} finally {
closeQuietly(conn);
}
}
/**
* 带连接带事务的更新操作
*
* @param conn
* @param sqlList
* @param parasList
* @return
*/
public static boolean executeUpdateTrans(Connection conn, List<String> sqlList, List<Object[]> parasList) {
PreparedStatement stmt = null;
try {
conn.setAutoCommit(false);
for (int i = 0; i < sqlList.size(); ++i) {
stmt = conn.prepareStatement(sqlList.get(i));
stmt.clearParameters();
for (int j = 0; j < parasList.get(i).length; ++j) {
stmt.setObject(j + 1, parasList.get(i)[j]);
}
stmt.executeUpdate();
closeQuietly(stmt);
}
conn.commit();
return true;
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException ex) {
}
return false;
} finally {
closeQuietly(stmt);
}
}
/**
* 不带连接带事务的更新操作
*
* @param sqlList
* @param parasList
* @return
*/
public static boolean executeUpdateTrans(List<String> sqlList, List<Object[]> parasList) {
Connection conn = null;
try {
conn = createConnection();
return executeUpdateTrans(conn, sqlList, parasList);
} catch (Exception e) {
return false;
} finally {
closeQuietly(conn);
}
}
/**
* 带连接的批量更新操作
*
* @param conn
* @param sql
* @param parasList
* @return
*/
public static boolean executeUpdateBatch(Connection conn, String sql, List<Object[]> parasList) {
PreparedStatement stmt = null;
try {
conn.setAutoCommit(false);
stmt = conn.prepareStatement(sql);
for (int i = 0; i < parasList.size(); ++i) {
stmt.clearParameters();
for (int j = 0; j < parasList.get(i).length; ++j) {
stmt.setObject(j + 1, parasList.get(i)[j]);
}
stmt.addBatch();
if (i % 1000 == 0) {
stmt.executeBatch();
}
}
stmt.executeBatch();
conn.commit();
return true;
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException ex) {
}
return false;
} finally {
closeQuietly(stmt);
}
}
/**
* 不带连接的批量更新操作
*
* @param sql
* @param parasList
* @return
*/
public static boolean executeUpdateBatch(String sql, List<Object[]> parasList) {
Connection conn = null;
try {
conn = createConnection();
return executeUpdateBatch(conn, sql, parasList);
} catch (Exception e) {
return false;
} finally {
closeQuietly(conn);
}
}
/**
* 获取最后插入数据的自增主键值
*
* @param conn
* @return
* @throws SQLException
*/
public static int getLastInsertId(Connection conn) throws SQLException {
ResultSet rs = null;
try {
rs = executeQuery(conn, "select last_insert_id() id ");
rs.next();
return rs.getInt("id");
} finally {
closeRSAndPS(rs);
}
}
/**
* 关闭资源
*
* @param ac
*/
public static void closeQuietly(AutoCloseable ac) {
if (ac != null) {
try {
ac.close();
} catch (Exception e) {
}
}
}
/**
* 关闭结果集
*
* @param rs
*/
public static void closeRSAndPS(ResultSet rs) {
Statement stmt = null;
try {
stmt = rs.getStatement();
closeQuietly(rs);
closeQuietly(stmt);
} catch (Exception e) {
}
}
/**
* 关闭结果集
*
* @param rs
*/
public static void closeRSAndPSAndConn(ResultSet rs) {
Connection conn = null;
Statement stmt = null;
try {
stmt = rs.getStatement();
conn = stmt.getConnection();
closeQuietly(rs);
closeQuietly(stmt);
closeQuietly(conn);
} catch (Exception e) {
}
}
}
记一次关于JDBCUtils工具类的编写的更多相关文章
- JavaWeb基础之JdbcUtils工具类final
JdbcUtils工具类3.0最终版,添加了事务相关功能和释放链接.最终版本可以直接打成jar包,在后面的基本项目都会使用该工具类 1. JdbcUtils代码 /** * 最终版 * @author ...
- JavaWeb基础之JdbcUtils工具类1.0
2016年12月20日,第一次学习JDBC.看的是传智播客崔希凡老师的视频,东北口音很是风趣幽默,技术之牛让人膜拜.2017年9月21日,再次重温web知识,分享JdbcUtils工具类,用以接下来的 ...
- Druid 连接池 JDBCUtils 工具类的使用
Druid工具介绍 它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. 支持所有JDBC兼容的数据库,包括Oracle.MySQL. ...
- 创建JDBCUtils工具类
JDBCUtils工具类 私有化构造函数,外界无法直接创建对象 提供公共的,静态的,getConnection 方法,用来给外界提供数据库连接 提供公共的,静态的,close方法,用来释放资源 pac ...
- 【JDBC】学习路径5-提取JDBCUtils工具类
回顾我们上面几节的内容,我们发现重复代码非常多,比如注册驱动.连接.关闭close()等代码,非常繁杂. 于是我们将这些重复的大段代码进行包装.提取成JDBCUtils工具类. 第一章:提取注册连接模 ...
- JavaWeb基础之JdbcUtils工具类2.0
使用c3p0连接池来改版JdbcUtils工具 1. 使用c3p0连接池获取连接,使代码更加简单 /** * 使用c3p0连接池做小工具 * JdbcUtils v2.0 * @author hui. ...
- Java基础知识强化92:日期工具类的编写和测试案例
1. DateUtil.java,代码如下: package cn.itcast_04; import java.text.ParseException; import java.text.Simpl ...
- 编写一个数组工具类, 编写本软件的 帮助文档(API文档)
本文档是对静态成员的练习. 一. 建立一个ArrayTool(数组工具)的类,在此类中对传入数组进行一些操作(选最大值.先最小值.冒泡排正序.选择排反序.输出数组元素), 二. 建立一个Test的类, ...
- JDBCUtils工具类
JdbcUtils.java import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource ...
随机推荐
- 合并两个word文档,保持样式不变
一.需求说明 例如将封面插入到word正文上方 二.导入依赖 <dependency> <groupId>org.apache.poi</groupId> < ...
- NRF24L01中断双向传输数据
NRF24L01是一款比较常见的无线通讯芯片,不过有个缺点就是只能半双工通讯,当涉及到双向通讯时就比较麻烦一些·,特别是想要做无线IAP数据需要一直来回发送,这点无疑然人恶心到想吐,不过还好有数据中断 ...
- 小白学习之pytorch框架(7)之实战Kaggle比赛:房价预测(K折交叉验证、*args、**kwargs)
本篇博客代码来自于<动手学深度学习>pytorch版,也是代码较多,解释较少的一篇.不过好多方法在我以前的博客都有提,所以这次没提.还有一个原因是,这篇博客的代码,只要好好看看肯定能看懂( ...
- no.10京东咚咚架构演讲读后感
京东之与旺旺相当于淘宝,他们都是服务于买家和卖家的沟通.京东咚咚的功能比较简单,实现了一个 IM 的基本功能,接入.互通消息和状态. 另外还有客服功能,就是顾客接入咨询时的客服分配,按轮询方式把顾客分 ...
- VUE- iView组件框架的使用
VUE- iView组件框架的使用 1. 下载iView 工程. 引用:https://www.iviewui.com/
- MySQL-TPS,QPS到底是什么
计算TPS,QPS的方式 qps,tps是衡量数据库性能的关键指标,网上普遍有两种计算方式 TPS,QPS相关概念 QPS:Queries Per Second 查询量/秒,是一台服务 ...
- Python 安装modules问题及import问题
>>>modules问题 在学习Python的数据可视化时,安装了matplotlib,在安装完成后还特意在终端测试了一下,结果显示能正常import 但是在sublime Text ...
- rename 修改文件名
Linux的 rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,早期的Linux发行版基本上使用的是C语言版本的,现在已经很难见到C语言版本的了,由于历史原因,在Perl语言 ...
- 使用图数据库 Nebula Graph 数据导入快速体验知识图谱
本文由 Nebula Graph 实习生@王杰贡献. 最近 @Yener 开源了史上最大规模的中文知识图谱——OwnThink(链接:https://github.com/ownthink/Knowl ...
- Ubuntu 安装软件时显示:无法获得锁 /var/lib/dpkg/lock -open(资源暂时不可用)
出错状况:在用 sudo apt-get install 安装软件时,结果终端提示: 无法获得锁 /var/lib/dpkg/lock -open(资源暂时不可用) 无法锁定管理目录(var/lib/ ...