package com.jd.util;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;/*** sql连接工具类* * @author mm*/
public class DBUtil {static {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}// 仅用驱动一次就行private static Connection getConnection() {try {return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");} catch (Exception e) {e.printStackTrace();} // 加载驱动return null;}/*** 获取数据库连接* * @author mm*/public static boolean exist(String sql) {class RowMapper implements IRowMapper {boolean state;@Overridepublic void rowMapper(ResultSet resultSet) {try {state = resultSet.next();} catch (SQLException e) {e.printStackTrace();}}}RowMapper rowMapper = new RowMapper();select(sql, rowMapper);return rowMapper.state;}/*** 判断数据是否存在* * @author mm*/public static boolean exist(String sql, Object... shuzu) {class RowMapper implements IRowMapper {boolean state;@Overridepublic void rowMapper(ResultSet resultSet) {try {state = resultSet.next();} catch (SQLException e) {e.printStackTrace();}}}RowMapper rowMapper = new RowMapper();select(sql, rowMapper, shuzu);return rowMapper.state;}/*** 判断数据是否存在* * @author mm*/public static boolean update(String sql) {Connection connection = null;Statement statement = null;try {connection = getConnection();statement = connection.createStatement();int result = statement.executeUpdate(sql);return result > 0;} catch (Exception e) {e.printStackTrace();} finally {close(statement, connection);}return false;}/*** 修改数据* * @author mm*/public static boolean update(String sql, Object... shuzu) {Connection connection = null;PreparedStatement preparedStatement = null;try {connection = getConnection();preparedStatement = connection.prepareStatement(sql);for (int i = 1; i <= shuzu.length; i++) {preparedStatement.setObject(i, shuzu[i - 1]);}int result = preparedStatement.executeUpdate();return result > 0;} catch (Exception e) {e.printStackTrace();} finally {close(preparedStatement, connection);}return false;}/*** 查询数据* * @author mm*/public static void select(String sql, IRowMapper rowMapper) {Connection connection = null;Statement statement = null;ResultSet resultSet = null;try {connection = getConnection();statement = connection.createStatement();// 创建语句resultSet = statement.executeQuery(sql);// 执行语句rowMapper.rowMapper(resultSet);// ***&&&%%%¥¥¥###@@@此处很多内幕,调用了实现类改写后的方法} catch (Exception e) {e.printStackTrace();} finally {// 释放资源close(statement, resultSet, connection);}}/*** 查询数据* * @author mm*/public static void select(String sql, IRowMapper rowMapper, Object... shuzu) {Connection connection = null;ResultSet resultSet = null;PreparedStatement preparedStatement = null;try {connection = getConnection();preparedStatement = connection.prepareStatement(sql);for (int i = 1; i <= shuzu.length; i++) {preparedStatement.setObject(i, shuzu[i - 1]);}resultSet = preparedStatement.executeQuery();rowMapper.rowMapper(resultSet);// ***&&&%%%¥¥¥###@@@此处很多内幕,调用了实现类改写后的方法} catch (Exception e) {e.printStackTrace();} finally {// 关闭资源close(preparedStatement, resultSet, connection);}}/*** 关闭资源* * @author mm*/private static void close(Statement statement, Connection connection) {if (statement != null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}/*** 关闭资源* @author mm*/private static void close(Statement statement, ResultSet resultSet, Connection connection) {close(statement, connection);if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}}
}

 如下是内幕:

package com.jd.util;import java.sql.ResultSet;public interface IRowMapper {void rowMapper(ResultSet resultSet);
}
package com.jd.util;import java.sql.ResultSet;
import java.sql.SQLException;public abstract class Row implements IRowMapper {public void rowMapper(ResultSet resultSet) {try {while (resultSet.next()) {String id = resultSet.getString("id");System.out.println(id);}} catch (SQLException e) {e.printStackTrace();}}
}

下面是升级后的JDBC百宝箱,新添了宝贝,先看代码:

package com.jd.util;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;/*** sql连接工具类* * @author mm*/
public class DBUtil {static {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}// 仅用驱动一次就行/*** 获取数据库连接* * @author mm*/private static Connection getConnection() {try {String url = PropertiesUtil.getValues("jdbc.url");String user_name = PropertiesUtil.getValues("jdbc.user_name");String password = PropertiesUtil.getValues("jdbc.password");return DriverManager.getConnection(url, user_name, password);} catch (Exception e) {e.printStackTrace();}return null;}// 获取连接,鉴于地址可变但已编译成的class文件不可更改,外建了 个文件地址等便于更改,此时PropertiesUtil相当于一个工具调用此文件/*** 判断数据是否存在* * @author mm*/public static boolean exist(String sql) {class RowMapper implements IRowMapper {boolean state;@Overridepublic void rowMapper(ResultSet resultSet) {try {state = resultSet.next();} catch (SQLException e) {e.printStackTrace();}}}RowMapper rowMapper = new RowMapper();select(sql, rowMapper);return rowMapper.state;}// 电脑自动输入方法/*** 判断数据是否存在* * @author mm*/public static boolean exist(String sql, Object... shuzu) {class RowMapper implements IRowMapper {boolean state;@Overridepublic void rowMapper(ResultSet resultSet) {try {state = resultSet.next();} catch (SQLException e) {e.printStackTrace();}}}RowMapper rowMapper = new RowMapper();select(sql, rowMapper, shuzu);return rowMapper.state;}// 手动输入用此方法/*** 修改数据* * @author mm*/public static boolean update(String sql) {Connection connection = null;Statement statement = null;try {connection = getConnection();statement = connection.createStatement();int result = statement.executeUpdate(sql);return result > 0;} catch (Exception e) {e.printStackTrace();} finally {// 释放资源close(statement, connection);}return false;}/*** 修改数据* * @author mm*/public static boolean update(String sql, Object... shuzu) {Connection connection = null;PreparedStatement preparedStatement = null;try {connection = getConnection();preparedStatement = connection.prepareStatement(sql);for (int i = 1; i <= shuzu.length; i++) {preparedStatement.setObject(i, shuzu[i - 1]);}int result = preparedStatement.executeUpdate();return result > 0;} catch (Exception e) {e.printStackTrace();} finally {close(preparedStatement, connection);}return false;}/*** 查询数据* * @author mm*/public static void select(String sql, IRowMapper rowMapper) {Connection connection = null;Statement statement = null;ResultSet resultSet = null;try {connection = getConnection();statement = connection.createStatement();// 创建语句resultSet = statement.executeQuery(sql);// 执行语句rowMapper.rowMapper(resultSet);// &&&此处很多内幕,调用了实现类改写后的方法} catch (Exception e) {e.printStackTrace();} finally {// 释放资源close(statement, resultSet, connection);}}/*** 查询数据* * @author mm*/public static void select(String sql, IRowMapper rowMapper, Object... shuzu) {Connection connection = null;ResultSet resultSet = null;PreparedStatement preparedStatement = null;try {connection = getConnection();preparedStatement = connection.prepareStatement(sql);for (int i = 1; i <= shuzu.length; i++) {preparedStatement.setObject(i, shuzu[i - 1]);}resultSet = preparedStatement.executeQuery();rowMapper.rowMapper(resultSet);// %%%此处很多内幕,调用了实现类改写后的方法} catch (Exception e) {e.printStackTrace();} finally {close(preparedStatement, resultSet, connection);}}/*** 释放资源* * @author mm*/private static void close(Statement statement, Connection connection) {if (statement != null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}/*** 释放资源* * @author mm*/private static void close(Statement statement, ResultSet resultSet, Connection connection) {close(statement, connection);if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}}/*** 批量处理* 新增的方法,事务处理* @author mm*/public static boolean batch(String... sqls) {Connection connection = null;Statement statement = null;try {connection = getConnection();connection.setAutoCommit(false);// 开启事务,等待提交statement = (Statement) connection.createStatement();for (String sql : sqls) {statement.addBatch(sql);}statement.executeBatch();// 执行语句。一错直接到catch,connection.commit();// 没错提交事务return true;} catch (Exception e) {e.printStackTrace();if (connection != null) {try {connection.rollback();// 有错等待返回} catch (SQLException e1) {e1.printStackTrace();} finally {close(statement, connection);}}}return false;}/*** 批量处理* 新增的方法,事务处理* @author mm*/public static boolean batch(String sql, Object[]... params) {Connection connection = null;PreparedStatement preparestatement = null;try {connection = getConnection();connection.setAutoCommit(false);// 开启事务,等待提交preparestatement = connection.prepareStatement(sql);for (int i = 0; i < params.length; i++) {for (int j = 1; j <= params[i].length; j++) {preparestatement.addBatch();}}preparestatement.executeBatch();// 执行语句。一错直接到catch,connection.commit();// 没错提交事务return true;} catch (Exception e) {e.printStackTrace();if (connection != null) {try {connection.rollback();// 有错等待返回} catch (SQLException e1) {e1.printStackTrace();} finally {close(preparestatement, connection);}}}return false;}}

增宝一:

在获取连接处:由于我们可能会出现不同的连接地址,又因为地址在方法里不好更改。已编成的class文件无法更改,于是外建了存放可更改的地址文件叫:properties;又建立class叫:propertiesUtil 来调用此文件,顺理成章,在百宝箱中引用propertiesUti类即可获取地址得到连接。

package com.jd.util;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class PropertiesUtil {static Properties properties = new Properties();static {InputStream inputStream = PropertiesUtil.class.getClassLoader().getResourceAsStream("db.properties");try {properties.load(inputStream);} catch (IOException e) {e.printStackTrace();}}public static String getValues(String key) {return properties.getProperty(key);}public static void main(String[] args) {System.out.println(getValues("jdbc.url"));}
}

增宝二:事务处理

相关请look 上篇博客

JDBC百宝箱方法集合(增删改等)相关推荐

  1. 写底层 jdbc 实现mysql数据库增删改的 合并方法 的类 继承ConnectionFactory 实现DaoMessage接口: 并批量添加数据

    接口: public interface DaoMessage<T> {int ERROR = 0x400;int SUCCESS = 0x200; //接口参数默认finalint ge ...

  2. HibernateTemplate、HibernateDaoSupport两种方法实现增删改查Good

    Spring+Hibernate两种方法实现增删改查 首先,定义一个Customer的bean类,设置好Customer.hbm.xml文件.再定义好一个Dao接口.准备好一个jdbc.propert ...

  3. Spring Data JDBC自动生成的增删改查CRUD分页、排序SQL语句非常简洁没有多余的SQL

    通过在application.properties文件中设置记录SQL日志 logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG ...

  4. JDBC对数据库进行增删改查【面向对象版】

    写在前面的话: 参考资料:尚硅谷视频 本章内容:使用面向对象的思想,进行对数据库的增删改查 IDE:eclipse JDK:Java8 MySQL:mysql  Ver 8.0.26 for Win6 ...

  5. 【Vue】MyClassroom.vue 使用组件方法实现增删改查-20221226

    MyClassroom.vue 使用组件方法实现增删改查. <template><div class="container"><div class=& ...

  6. 用Spring+jdbc 写一个数据库增删改查

    用Spring+Jdbc写一个数据库增删改查 先展示项目结构 ClassBiz.java package com.gxj.biz;import java.util.List;import com.gx ...

  7. 通过JDBC进行简单的增删改查(二)

    本章笔记更易理解和学习,也是我第一次初学的笔记. 1 package javastudy; 2 3 import java.sql.Connection; 4 import java.sql.Driv ...

  8. JDBC进行简单的增删改查

    一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 (3)insert (4)up ...

  9. 通过JDBC进行简单的增删改查(以MySQL为例)

    目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 ( ...

最新文章

  1. (转)php-cli模式学习(PHP命令行模式)
  2. 六十六、实现Vue项目首页轮播图(vue-awesome-swiper)
  3. python psutil库安装_安装psutil模块报错安装python-devel
  4. POJ 1611 The Suspects (并查集)
  5. 2017蓝桥杯省赛---java---C---7 Excel地址)
  6. k8s核心技术-配置管理_Secret_以变量形式使用Secret文件_以及以数据卷的形式使用Secret文件---K8S_Google工作笔记0036
  7. Docker下安装Anaconda
  8. 2013蓝桥杯C++A:颠倒的价牌(stringstream用法)
  9. 2只老虎c语言课程设计,中班两只老虎教案
  10. 【STC15】串口使用
  11. 完美卸载IE8/IE7安装IE6
  12. 分享5个Excel实用日常小技巧,不会的别说你会Excel!
  13. 求职面试过程中都需要注意哪些
  14. mysql error 1677_MySQL slave error 1677
  15. Markdown详细教程
  16. Oracle数据库 表空间
  17. openCV错误解决方案:无法启动此程序,因为计算机中丢失opencv_world310.dll
  18. 前端之HTML基础扫盲
  19. 现代计算机基本工作原理,计算机基本原理
  20. SpringCloud 基础教程(八)-Hystrix熔断器(上)

热门文章

  1. abs、fabs 用法
  2. linux远程连接硬件加速,Linux中为谷歌Chrome浏览器启用视频硬件加速的方法
  3. vue中如何在搜索框中实现关键字搜索
  4. 华南农业大学计算机学院院长,华南农业大学外国语学院院长何高大
  5. 尘福通:智慧城市建设、运营、演进路径思考
  6. 千杯酒中检测那一杯毒酒的问题及思考
  7. Android开发笔记之SeekBar 时间的显示 快进快退 Mediaplayer
  8. python判断一个字符串在数组中的位置
  9. jdk8 list Stream groupingBy 分组之后 利用 reducing 求和 BigDecimal
  10. win10计算机丢失msvcr,win10计算机丢失MSVCR120文件怎么办