JDBC 数据库增删改查的通用代码示例详解

数据库的 CRUD的通用操作

    • JDBC的基本操作
    • 使用Properties对象
    • 增删改查工具类
      • 加载数据库驱动类
      • 建立连接(Connection)
      • 关闭connection和statement
      • 增删改操作的通用代码
      • 查询操作的通用代码
      • 批量操作的通用代码
      • 重载excuteBathc方法
    • Main方法测试
      • 代码
      • 结果展示
  • 获取User实体
    • 设计UserEntityMapper类
    • 获取User实体的工具方法
  • service设计
  • dao设计

JDBC的基本操作

为了使代码复用,提高开发效率,设计JDBC数据库的增删改查非常有必要。

JDBC 操作数据步骤一般分为如下五个步骤:

一、加载数据库驱动类

  • Class.forName("com.mysql.cj.jdbc.Driver");

二、建立连接(Connection)

  • Connection connection = DriverManager.getConnection(url,user,password);

三、创建用于向数据库发送 SQL 的 PrepareStatement 对象,并发送 sql

  • PrepareStatement statement = connection.PrepareStatement(sql);

四、从结果集的 ResultSet 中取出返回数据。

  • ResultSet resultSet = statement.excuteQuery();

五、关闭相关资源,并释放内存

  • *.close()

使用Properties对象

Properties 对象可以保存了一组关键数值。它通过调用 getConnection() 方法,将驱动程序属性传递给驱动程序。

在根目录(位置可以任意)新建一个jdbc.properties文件

mysql8需要设置时区,有cj目录,mysql5没有。时区可设置为GMT8表示东八区

url=jdbc:mysql://58.42.239.163:3306/jdbc?serverTimezone=Asia/Shanghai&characterEncoding=UTF8&useSSL=false
user=star
password=Star@123456

说明:

  • Properties prot = new Properties();

    创建配置文件对象,或者使用IO流读取

  • InputStream input = JDBC1.class.getClassLoader().getResourceAsStream("jdbc.properties");

    通过loader加载配置文件

  • prot.load(input);

    通过输入流读取配置文件信息

  • prot.getProperty("url")

    通过getXXX()读取配置数据

增删改查工具类

加载数据库驱动类

通过Class.forName反射加载mysql8驱动类

因为每次对数据库操作都会加载驱动类,通过使用static代码块,可以直接在类加载的时候就加载,只执行一次,就不用每次都去加载

public class JDBCUtility {
    //加载mysql驱动类
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

建立连接(Connection)

将连接封装成工具方法

/**
 * 获取连接
 *
 * @return 返回得到创建的连接
 */
public static Connection getConnection() {
   
    Properties properties = new Properties();
    Connection connection = null;
    try (
            FileInputStream fis = new FileInputStream("jdbc.properties");
    ) {
   
        properties.load(fis);
        connection = DriverManager.getConnection(properties.getProperty("url"), properties);
    } catch (Exception e) {
   
        e.printStackTrace();
    }
    return connection;
}

关闭connection和statement

重载三个Close()方法,在使用完资源后,调方法关闭资源

/**
 * 关闭connection连接
 *
 * @param connection 连接
 */
public static void Close(Connection connection) {
   
    if (connection != null) {
   
        try {
   
            connection.close();
        } catch (SQLException throwables) {
   
            throwables.printStackTrace();
        }
    }
}

/**
 * 关闭statement连接
 *
 * @param statement 连接
 */
public static void Close(Statement statement) {
   
    if (statement != null) {
   
        try {
   
            statement.close();
        } catch (SQLException throwables) {
   
            throwables.printStackTrace();
        }
    }
}

/**
 * 关闭connection和statement连接
 *
 * @param connection 连接
 */
public static void Close(Connection connection, Statement statement) {
   
    Close(statement);
    Close(connection);
}

增删改操作的通用代码

传递需要执行的sql语句,参数可以选择满足条件的参数

PrepareStatement是预编译,一次编译,多次执行,提高效率,sql条件使用”?“可以防止sql注入问题

/**
 * 增删改的通用操作
 *
 * @param sql  需要执行的sql语句
 * @param params 条件参数
 * @return 返回受影响的行数
 */
public static int executeUpdate(String sql, Object... params) {
   
    Connection connection = getConnection();
    PreparedStatement statement = null;
    int rows = -1;
    if (connection == null) {
   
        return rows;
    }
    try {
   
        connection.setAutoCommit(false);
        statement = connection.prepareStatement(sql)<

你可能感兴趣的:(Java+JDBC,database,mysql,jdbc)