资讯详情

一个关于数据库操作的优化实例

本专栏将从基础开始,逐步解释数据库的基本概念和使用情况。我希望每个人都能从中获益,请给予更多的支持。 专栏地址: 数据库必知必会 软件地址:软件地址: 若文章知识点有错误,请指正!大家一起学习,一起进步。

文章目录

  • 1 数据库操作的优化实例
    • 1.1 原始版本
    • 1.2 使用JDBCUtil封装代码
    • 1.3 统一的查询和修改配置文件的方式
    • 1.4 各种返回结果采用泛型处理
    • 1.5 连接池

1 数据库操作的优化实例

1.1 原始版本

添加依赖

<dependencies>         <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->         <dependency>             <groupId>mysql</groupId>             <artifactId>mysql-connector-java</artifactId>             <version>8.0.22</version>         </dependency>     </dependencies> 

创建数据库和表:

create database learnDesignPattern;  use  learnDesignPattern;  create table t_student(     id int(32) primary key auto_increment,     name varchar(50),     age varchar(50) );  alter table t_student change column age  age int(32); 

创建学生类Student.java:

public class Student { 
             private int age;     private String name;     private int id;

    public Student(int age, String name) { 
        
        this.age = age;
        this.name = name;
    }

    public Student(int age, String name, int id) { 
        
        this.age = age;
        this.name = name;
        this.id = id;
    }

    public int getId() { 
        
        return id;
    }

    public void setId(int id) { 
        
        this.id = id;
    }

    public int getAge() { 
        
        return age;
    }

    public void setAge(int age) { 
        
        this.age = age;
    }

    public String getName() { 
        
        return name;
    }

    public void setName(String name) { 
        
        this.name = name;
    }
}

创建对学术的增删查改StudentDao.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;

public class StudentDao { 
        

    //添加学生信息
    public void add(Student stu){ 
        
        String sql = "insert into t_student(name,age) values(?,?)";
        Connection conn = null;
        Statement st = null;

        try{ 
        
            //1.初始化驱动类,在初始化的时候通过静态代码块中的java.sql.DriverManager.registerDriver(new Driver())注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取数据库连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/learnDesignPattern?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT","root","root");
            //3.创建语句对象
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setObject(1,stu.getName());
            ps.setObject(2,stu.getAge());
            //4.执行sql
            ps.executeUpdate();
        } catch (Exception e) { 
        
            e.printStackTrace();
        }finally { 
        
            //释放资源
            try{ 
        
                if (st != null){ 
        
                    st.close();
                }

                if(conn!=null){ 
        
                    conn.close();
                }
            }catch (Exception e){ 
        
                e.printStackTrace();
            }
        }
    }

    //删除学生信息
    public void delete(int id){ 
        
        String sql = "delete from t_student where id=?";
        Connection conn = null;
        Statement st = null;

        try{ 
        
            //1.初始化驱动类,在初始化的时候通过静态代码块中的java.sql.DriverManager.registerDriver(new Driver())注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取数据库连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/learnDesignPattern?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT","root","root");
            //3.创建语句对象
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setObject(1,id);
            //4.执行sql
            ps.executeUpdate();
        } catch (Exception e) { 
        
            e.printStackTrace();
        }finally { 
        
            //释放资源
            try{ 
        
                if (st != null){ 
        
                    st.close();
                }

                if(conn!=null){ 
        
                    conn.close();
                }
            }catch (Exception e){ 
        
                e.printStackTrace();
            }
        }
    }

    //修改学生信息
    public void update(Student stu){ 
        
        String sql = "update t_student set name =?,age=? where id=?";
        Connection conn = null;
        Statement st = null;

        try{ 
        
            //1.初始化驱动类,在初始化的时候通过静态代码块中的java.sql.DriverManager.registerDriver(new Driver())注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取数据库连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/learnDesignPattern?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT","root","root");
            //3.创建语句对象
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setObject(1,stu.getName());
            ps.setObject(2,stu.getAge());
            ps.setObject(3,stu.getId());
            //4.执行sql
            ps.executeUpdate();
        } catch (Exception e) { 
        
            e.printStackTrace();
        }finally { 
        
            //释放资源
            try{ 
        
                if (st != null){ 
        
                    st.close();
                }

                if(conn!=null){ 
        
                    conn.close();
                }
            }catch (Exception e){ 
        
                e.printStackTrace();
            }
        }
    }
}

1.2 使用JDBCUtil封装代码

可以看到上面代码功能没有问题,但是重复代码太多,因此可以进行抽取,把重复代码放到一个工具类JDBCUtil里。

  • JDBCUtil.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCUtil { 
        
    private JDBCUtil(){ 
        }

    static { 
        
        try{ 
        
            //1.初始化驱动类,在初始化的时候通过静态代码块中的java.sql.DriverManager.registerDriver(new Driver())注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
        }catch (Exception e){ 
        
            e.printStackTrace();
        }
    }

    public static Connection getConnection(){ 
        
        try{ 
        
            //2.获取数据库连接
            return DriverManager.getConnection("jdbc:mysql://localhost:3306/learnDesignPattern?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT","root","root");
        }catch (Exception e){ 
        
            e.printStackTrace();
        }
        return null;
    }

    public static void close(ResultSet rs, Statement st, Connection conn){ 
        
        //释放资源
        try{ 
        
            if(rs != null){ 
        
                rs.close();
            }

            if (st != null){ 
        
                st.close();
            }

            if(conn!=null){ 
        
                conn.close();
            }
        }catch (Exception e){ 
        
            e.printStackTrace();
        }
    }


}
  • StudentDao.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;

public class StudentDao { 
        

    //添加学生信息
    public void add(Student stu){ 
        
        String sql = "insert into t_student(name,age) values(?,?)";
        Connection conn = null;
        Statement st = null;
        PreparedStatement ps = null;
        try{ 
        
            conn = JDBCUtil.getConnection();
            ps = conn.prepareStatement(sql);
            ps.setObject(1,stu.getName());
            ps.setObject(2,stu.getAge());
            ps.executeUpdate();
        } catch (Exception e) { 
        
            e.printStackTrace();
        }finally { 
        
            JDBCUtil.close(null,ps,conn);
        }
    }

    //删除学生信息
    public void delete(int id){ 
        
        String sql = "delete from t_student where id=?";
        Connection conn = null;
        Statement st = null;
        PreparedStatement ps = null;
        try{ 
        
            conn = JDBCUtil.getConnection();
            ps = conn.prepareStatement(sql);
            ps.setObject(1,id);
            ps.executeUpdate();
        } catch (Exception e) { 
        
            e.printStackTrace();
        }finally { 
        
            JDBCUtil.close(null,ps,conn);
        }
    }

    //修改学生信息
    public void update(Student stu){ 
        
        String sql = "update t_student set name =?,age=? where id=?";
        Connection conn = null;
        Statement st = null;
        PreparedStatement ps = null;
        try{ 
        
            conn = JDBCUtil.getConnection();
            ps = conn.prepareStatement(sql);
            ps.setObject(1,stu.getName());
            ps.setObject(2,stu.getAge());
            ps.setObject(1,stu.getId());
            ps.executeUpdate();
        } catch (Exception e) { 
        
            e.printStackTrace();
        }finally { 
        
            JDBCUtil.close(null,ps,conn);
        }
    }
}

1.3 使用配置文件,以及查询和修改统一方式

3.2的方法任然有部分冗余,可以把查询和修改的方法进行统一。

  • JDBCUtil.java
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtil { 
        

    private static Properties p = null;

    private JDBCUtil(){ 
        }

    static { 
        
        try{ 
        
            //1.初始化驱动类,在初始化的时候通过静态代码块中的java.sql.DriverManager.registerDriver(new Driver())注册驱动
            ClassLoader loader = Thread.currentThread().getContextClassLoader();
            InputStream inputStream = loader.getResourceAsStream("db.properties");
            p = new Properties();
            p.load(inputStream);
            Class.forName(p.getProperty("driverClassName"));
        }catch (Exception e){ 
        
            e.printStackTrace();
        }
    }

    public static Connection getConnection(){ 
        
        try{ 
        
            //2.获取数据库连接
            return DriverManager.getConnection(p.getProperty("url"),p.getProperty("username"),p.getProperty("password"));
        }catch (Exception e){ 
        
            e.printStackTrace();
        }
        return null;
    }

    public static void close(ResultSet rs, Statement st, Connection conn){ 
        
        //释放资源
        try{ 
        
            if(rs != null){ 
        
                rs.close();
            }

            if (st != null){ 
        
                st.close();
            }

            if(conn!=null){ 
        
                conn.close();
            }
        }catch (Exception e){ 
        
            e.printStackTrace();
        }
    }


}
  • JDBCTemplate.java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class JDBCTemplate { 
        

    public static void update 

标签: cgw智能高低浓度甲烷传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台