记一次关于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 ...
随机推荐
- ORACLE常见问题收集
1.Java代码执行oracle,update和insert语句卡住不动 解决方法:造成这样的情况原因在于你之前执行了update或insert操作但你并没有commit,导致你操作的这条记录被ora ...
- SQLite数据库以及增删改查的案例
Android使用开源的与操作系统无关的SQL数据库——SQLite 一:在命令行下创建数据库: 1.启动模拟器后,打开命令行,执行adb shell 2.进入所在工程目录 3.执行sqlite3 m ...
- Java多线程通讯---------wait,notify区别
class Res{ public String username; public String sex; } class Out extends Thread{ Res res; public Ou ...
- linux 下shell 编写脚本
linux 下shell 编写脚本: 1.程序结构练习:编写一个脚本,给定一个正整数,计算出这个数所有位的数字之和. 例如:程序给定输入123,那么应该返回1+2+3=6. 2.程序结构练习:编写一个 ...
- 浅入深出Java输入输出流主线知识梳理
Java把不同类型的输入.输出,这些输入输出有些是在屏幕上.有些是在电脑文件上, 都抽象为流(Stream) 按流的方向,分为输入流与输出流,注意这里的输出输出是相对于程序而言的,如:如对于一个J ...
- SQL server 查询常用语句 2019.3.20
SQL查询语句 select ...列名 from 表名 投影查询 select sno num,2019-sage as birthday // 给列起别名 from student: 在每个学生姓 ...
- 统计web 访问日志的请求数据
tomcat日志格式 在配置文件 server.xml 中,具体参照官方文档 https://tomcat.apache.org/tomcat-8.0-doc/config/valve.html#A ...
- P3252 [JLOI2012]树
题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深度为1.路径不 ...
- springboot +Thymeleaf+UEditor整合记录
1,ueditor官网下载:https://ueditor.baidu.com/website/download.html 下载相应的工具包和源码,ps:源码放到工程中 2,解压放到放到项目中,sp ...
- Tomcat8 启动报错
Tomcat8启动报错: java.lang.NoSuchMethodError:javax.servlet.ServletContext.getClassLoader 在网上搜索后,发现此类问题大都 ...