Bootstrap

JDBC-Util工具类

  根据前面的代码,当我们要对数据库进行大量的操作时,会产生非常多的重复代码。而且不利于后续的修改操作,因此我们可以写一个jdbc的工具类,让它从配置文件中读取配置参数,然后创建连接对象。

properties

  properties配置文件是一种用于存储应用程序配置信息的文本文件。通过properties配置文件,可以使程序的配置信息与程序逻辑代码分离,便于维护和修改。

  • 文件名:通常以“.properties”为后缀名。
  • 内容格式:由一系列键值对组成,每个键值对表示一个配置项,键值对之间使用等号“=”分隔。例如,“database.url=jdbc:mysql://localhost:3306/mydb”表示一个数据库连接的配置项。

创建一个db.properties文件,里面填入关于数据库的四大参数:

driverClass = com.mysql.jdbc.Driver
jdbcUrl = jdbc:mysql://localhost:3306/esa?useSSL=false
username = root
password = 123456

 jdk有一个对应的类import java.util.Properties;是Map接口实现类,key和value都是String。

 读取一个properties文件,解析数据,变成key/value结构,存储到properties对象

getClassLoader()获取类加载器 

Properties props = new Properties();
props.load(jdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"));

获取properties文件里的value值可以使用:

props.getProperty("Key值");


util工具类

在调用方法的时候直接加载驱动类,所以卸载静态代码块中:

    //加载数据库的四大参数
    static {
        try{
            props.load(jdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"));
            Class.forName(props.getProperty("driverClass"));

        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

在执行增删查改时自动获取连接对象。

  public static Connection getConnect() throws SQLException {
        String jdbcUrl = props.getProperty("jdbcUrl");
        String username = props.getProperty("username");
        String password = props.getProperty("password");
        return DriverManager.getConnection(jdbcUrl, username, password);
    }

接下来是增删查改的方法:

    //执行增删查的方法
    public static int executeUpdate(String sql,Object... params){
        try {
            conn = getConnect();
            stmt = conn.prepareStatement(sql);
            //给问号赋值
            for(int i = 0;i < params.length;i++){
                stmt.setObject(i+1,params[i]);
            }
            //执行
            return stmt.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            close(null);
        }

    }
    //查询方法,返回结果集
    public static ResultSet executeQuery(String sql,Object... params) throws SQLException {
        Connection conn = null;
        PreparedStatement pstmt = null;
        conn = getConnect();
        pstmt = conn.prepareStatement(sql);

        for(int i = 0;i < params.length;i++){
            pstmt.setObject(i+1,params[i]);
        }
        ResultSet resultSet = pstmt.executeQuery();
        return resultSet;
    }

最后关闭连接对象:

public static void close(ResultSet rs){
        try{
            if(rs != null) rs.close();
            if(stmt != null) stmt.close();
            if(conn != null) conn.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

测试

        //查询测试
        String sql = "select * from demo";
        try {
            ResultSet rs = jdbcUtil.executeQuery(sql);
            while (rs.next()){
                String name = rs.getString("name");
                String kecheng = rs.getString("kecheng");
                String fenshu  = rs.getString("fenshu");
                System.out.println(name+" "+kecheng+" "+fenshu);
            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        String sql = "insert into demo(name,kecheng,fenshu) values('小红','java','88')";
        int i = jdbcUtil.executeUpdate(sql);
        System.out.println("共改变了"+i+"行数据");

 

再次执行查询:

 

;