• 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工具类的编写的更多相关文章

  1. JavaWeb基础之JdbcUtils工具类final

    JdbcUtils工具类3.0最终版,添加了事务相关功能和释放链接.最终版本可以直接打成jar包,在后面的基本项目都会使用该工具类 1. JdbcUtils代码 /** * 最终版 * @author ...

  2. JavaWeb基础之JdbcUtils工具类1.0

    2016年12月20日,第一次学习JDBC.看的是传智播客崔希凡老师的视频,东北口音很是风趣幽默,技术之牛让人膜拜.2017年9月21日,再次重温web知识,分享JdbcUtils工具类,用以接下来的 ...

  3. Druid 连接池 JDBCUtils 工具类的使用

    Druid工具介绍 它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. 支持所有JDBC兼容的数据库,包括Oracle.MySQL. ...

  4. 创建JDBCUtils工具类

    JDBCUtils工具类 私有化构造函数,外界无法直接创建对象 提供公共的,静态的,getConnection 方法,用来给外界提供数据库连接 提供公共的,静态的,close方法,用来释放资源 pac ...

  5. 【JDBC】学习路径5-提取JDBCUtils工具类

    回顾我们上面几节的内容,我们发现重复代码非常多,比如注册驱动.连接.关闭close()等代码,非常繁杂. 于是我们将这些重复的大段代码进行包装.提取成JDBCUtils工具类. 第一章:提取注册连接模 ...

  6. JavaWeb基础之JdbcUtils工具类2.0

    使用c3p0连接池来改版JdbcUtils工具 1. 使用c3p0连接池获取连接,使代码更加简单 /** * 使用c3p0连接池做小工具 * JdbcUtils v2.0 * @author hui. ...

  7. Java基础知识强化92:日期工具类的编写和测试案例

    1. DateUtil.java,代码如下: package cn.itcast_04; import java.text.ParseException; import java.text.Simpl ...

  8. 编写一个数组工具类, 编写本软件的 帮助文档(API文档)

    本文档是对静态成员的练习. 一. 建立一个ArrayTool(数组工具)的类,在此类中对传入数组进行一些操作(选最大值.先最小值.冒泡排正序.选择排反序.输出数组元素), 二. 建立一个Test的类, ...

  9. JDBCUtils工具类

    JdbcUtils.java import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource ...

随机推荐

  1. 18 11 26 用多进程 多线程 携程 实现 http 服务器的创建

    下面是一个  多进程 服务器的创建 import socket import re import multiprocessing def service_client(new_socket): &qu ...

  2. SpringCloud学习之Feign 的使用(五)

     Feign 是一个声明式的伪RPC的REST客户端,它用了基于接口的注解方式,很方便的客户端配置,刚开始使用时还不习惯,感觉是在客户端写服务端的代码,Spring Cloud 给 Feign 添加了 ...

  3. ABP 切换mysql 数据库报错mysqlexception: incorrect string value: ‘\xe7\xae\x80\xe4\xbd\x93…’ for column display name

    刚折腾了ABP框架,为了跨平台,将SQL Server数据库换成了MySQL数据库,ABP框架上支持多语言,中间被字符集折腾的够呛,翻了N个博客,最后终于在StackOverFlow 上找到了最终的解 ...

  4. SSM框架和微服务构架和的联系与区别

    spring和springMvc: 1. spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc).业务层(Ioc) ...

  5. PHP+InfiniteScroll实现网页无限滚动加载数据实例

    PHP+InfiniteScroll实现网页无限滚动加载数据实例,实现原理:当滚动条到底离网页底部一定长度的时候,向后台发送页数并获取数据. 首先我们在页面上先放置10条数据,即第一页,每一项都是p标 ...

  6. Delphi生成即调用带窗体的Dll

    library frmDll; { Important note about DLL memory management: ShareMem must be the first unit in you ...

  7. 删除xcode项目中不再使用的图片资源

    1. 利用工具    下载地址  http://jeffhodnett.github.io/Unused/   运行效果如下 2. 通过终端 执行 shell 命令 a. 第一步建立.sh 文件  如 ...

  8. Microsoft SQL Server Management Studio连接后报“ viewInfo (Microsoft.SqlServer.Management.SqlStudio.Expl”

    解决办法: 在路径:C:\Users\你的用户名\AppData\Local\Temp\”新建文件夹并命名为2,如果已经有 2 则看清楚是否是文件而不是文件夹,删掉文件改为文件夹: 如果是找不到\Us ...

  9. h5-背景样式

    <style> div{ width: 100%; height: 150px; border: 1px solid red; /*overflow: scroll;*/ /*1.添加背景 ...

  10. Properties in Algebra

    附录-Properties in Algebra 部分证明转载自标注,仅作个人整理查阅用. 范数 (norm) \(^{[1]}\) 要更好的理解范数,就要从函数.几何与矩阵的角度去理解,我尽量讲的通 ...