记一次关于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 ...
随机推荐
- Uber推出全新交通估算体系能颠覆传统模式吗?
当下,大众的交通出行正在被全面颠覆.除了传统的出行方式外,共享打车.共享单车.共享滑板车.分时租赁的共享汽车等,正在形成一个全新交通出行矩阵.鉴于交通出行市场的巨大潜力,众多巨头及独角兽企业在绞尽脑汁 ...
- 7206VXR系列板卡简介(转)
原文链接:https://www.it610.com/article/3116409.htm作者:hjw2011 ATM板卡介绍 板卡PA-A6-OC3MM,PA-A6-OC3SMI,PA-A6-OC ...
- Unix网络编程学习 < 一 >
#include "unp.h" int main(int argc , char**argv) { int sockfd , n; //sockfd套接字描述符 ]; struc ...
- JavaScript—面向对象小例子
什么是面向对象 要是以前别人问我.随口道来,封装继承多态,万物皆对象...一大推.说的自己都以为自己掌握了面向对象.呵呵一笑.确实掌握了 只是不会用..... 什么是面向对象编程 以前 学.Net 虽 ...
- 洛谷 P4342 [IOI1998]Polygon
题目传送门 解题思路: 一道环形dp,只不过有个地方要注意,因为有乘法,两个负数相乘是正数,所以最小的数是负数,乘起来可能比最大值大,所以要记录最小值(这道题是紫题的原因). AC代码: #inclu ...
- 堆排序算法以及python实现
堆满足的条件:1,是一颗完全二叉树.2,大根堆:父节点大于各个孩子节点.每个节点都满足这个道理.小根堆同理. parent = (i-1)/2 #i为当前节点 left = 2*i+1 righ ...
- 编程作业2.1:Logistic regression
题目 在这部分的练习中,你将建立一个逻辑回归模型来预测一个学生是否能进入大学.假设你是一所大学的行政管理人员,你想根据两门考试的结果,来决定每个申请人是否被录取.你有以前申请人的历史数据,可以将其用作 ...
- 微服务项目开发学成在线_Vue.js与Webpack
Vue.js 1.Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.自底向上逐层应用:作为渐进式框架要实现的目标就是方便项目增量开发. 渐进式框架:Progress ...
- c#学习笔记05——数组&集合
数组 声明数组 .一维数组的定义: 数据类型[] 数组名=new 数据类型[大小]; eg: ]; ,,,,}; ]; .多维数组的定义 ,];//定义二维数组 ,,];//定义三维数组 多维数组可以 ...
- Java虚拟机(JVM) - 学习总结(全)
深入理解java虚拟机---学习总结: 1.Java内存区域 1.1 java运行时数据区 Java 虚拟机所管理的内存如下图所示,基于JDK1.6. 基于jdk1.8画的JVM的内存模型 (1) 程 ...