Java中数据库进行jdbc连接怎莫进行`连接封装`和释放

Java中数据库进行jdbc连接怎莫进行连接封装和释放呢?我们以学生管理系统为例:
话不多说,看秦哥直接上代码:

public class StudentDao {
	//学生对象数据库访问层
	//查询学生所有信息
	//运用集合,先把查询到的信息放入到集合里面
	public ArrayList<StudentEntity> allstudent() throws ClassNotFoundException, SQLException{
		Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
		//java连接数据库
		//导入mysql驱动jar包
		//注册驱动javase反射机制 class.forName()
		Class.forName("com.mysql.cj.jdbc.Driver");
		//获取数据库的连接
		Connection connection1=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student?serverTimezone=UTF-8","root","123");
		//获取执行者对象
		Statement statement1=connection1.createStatement();
		//执行sql语句并返回结果
		String sql="select * from student";
		ResultSet resultSet1=statement1.executeQuery(sql);
		 ArrayList<StudentEntity> studentEntities = new ArrayList<>();
		//对结果进行处理
		while(resultSet.next())
		{
			// 获取该行数据的第一列 id
            Long id = resultSet1.getLong("id");
            // 获取该行数据的第二列 name
            String name = resultSet1.getString("name");
            // 获取该行数据的第三列 age
            Integer age = resultSet1.getInt("age");
            // 获取该行数据的第四列 address
            String address = resultSet1.getString("address");
            // 将db中查询到数据封装成java学生对象
            //注意这个,这就是封装里面的内容哦
            //将这个里面的对象和一些值 传递过来 这就是传参 这个非常重要
            StudentEntity studentEntity = new StudentEntity(id, name, age, address);
            // 将该对象存入到集合中
            studentEntities.add(studentEntity);
		}
        return studentEntities;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    } finally {
        //  7. 释放jdbc资源
        try {
            if (resultSet != null)
                resultSet.close();
            if (statement != null)
                statement.close();
            if (connection != null)
                connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

}

/**
 * 根据学生id 查询学生信息 学生的id
 *
 * @return
 */
public StudentEntity getByIdStudent(Long stuId) {
    /**
     * 判断用户是否传递学生id的值
     */
    if (stuId == null) {
        return null;
    }
    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;
    try {
        //A.java连接mysql数据库查询所有数据
        //1.导入mysql驱动jar包;
        //2. 注册驱动 javase 反射机制Class.forName()
        Class.forName("com.mysql.cj.jdbc.Driver");
        //3. 获取数据库连接
        connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student?serverTimezone=UTC", "root", "123");
        //4. 获取执行者对象
        statement = connection.createStatement();
        //5. 执行sql语句并获取返回结果 自己拼接 查询sql语句
        resultSet = statement.executeQuery("select  * from student where id=" + stuId);
        boolean result = resultSet.next(); // 查询不到数据 false
        // 判断如果查询不到数据 则不会取值
        if (!result) {
            return null;
        }
        //6. 对结果进行处理
        // 获取该行数据的第一列 id
        Long id = resultSet.getLong("id");
        // 获取该行数据的第二列 name
        String name = resultSet.getString("name");
        // 获取该行数据的第三列 age
        Integer age = resultSet.getInt("age");
        // 获取该行数据的第四列 address
        String address = resultSet.getString("address");
        // 将db中查询到数据封装成java学生对象
        StudentEntity studentEntity = new StudentEntity(id, name, age, address);
        return studentEntity;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    } finally {
        //  7. 释放jdbc资源
        try {
            if (resultSet != null)
                resultSet.close();
            if (statement != null)
                statement.close();
            if (connection != null)
                connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

}

/**
 * 插入我们的学生
 *
 * @param stu
 * @return
 */
public int insertStudent(StudentEntity stu) {
    Connection connection = null;
    Statement statement = null;
    try {
        //A.java连接mysql数据库查询所有数据
        //1.导入mysql驱动jar包;
        //2. 注册驱动 javase 反射机制Class.forName()
        Class.forName("com.mysql.cj.jdbc.Driver");
        //3. 获取数据库连接
        connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student?serverTimezone=UTC", "root", "123");
        //4. 获取执行者对象
        statement = connection.createStatement();
        //5. 执行sql语句并获取返回结果 executeUpdate执行 insert sql语句
        String insertStudentSql = "INSERT INTO student values(null,'" + stu.getName() + "'," + stu.getAge() + ",'" + stu.getAddress() + "')";
        System.out.println("insertStudentSql:" + insertStudentSql);
        // log输出
        int result = statement.executeUpdate(insertStudentSql);
        // 执行该sql语句 影响行数
        return result;
    } catch (Exception e) {
        e.printStackTrace();
        return 0;
    } finally {
        //  7. 释放jdbc资源
        try {
            if (statement != null)
                statement.close();
            if (connection != null)
                connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}

/**
 * 修改学生的信息
 *
 * @param stu
 * @return
 */
public int updateStudent(StudentEntity stu) {
    Connection connection = null;
    Statement statement = null;
    try {
        //A.java连接mysql数据库查询所有数据
        //1.导入mysql驱动jar包;
        //2. 注册驱动 javase 反射机制Class.forName()
        Class.forName("com.mysql.cj.jdbc.Driver");
        //3. 获取数据库连接
        connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student?serverTimezone=UTC", "root", "123");
        //4. 获取执行者对象
        statement = connection.createStatement();
        //5. 执行sql语句并获取返回结果 executeUpdate执行 update sql语句
        String updateStudentSql = "update student  set name='" + stu.getName() + "' ,age=" + stu.getAge() + "," +
                "address='" + stu.getAddress() + "' where id=" + stu.getId() + "";
        // log输出
        System.out.println("updateStudentSql:" + updateStudentSql);
        int result = statement.executeUpdate(updateStudentSql);
        // 执行该sql语句 影响行数
        return result;
    } catch (Exception e) {
        e.printStackTrace();
        return 0;
    } finally {
        //  7. 释放jdbc资源
        try {
            if (statement != null)
                statement.close();
            if (connection != null)
                connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}

/**
 * 根据主键id删除学生信息
 *
 * @param id
 * @return
 */
public int delStudent(Long id) {
    // 判断id是否为null
    if (id == null) {
        return 0;
    }
    Connection connection = null;
    Statement statement = null;
    try {
        //A.java连接mysql数据库查询所有数据
        //1.导入mysql驱动jar包;
        //2. 注册驱动 javase 反射机制Class.forName()
        Class.forName("com.mysql.cj.jdbc.Driver");
        //3. 获取数据库连接
        connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student?serverTimezone=UTC", "root", "123");
        //4. 获取执行者对象
        statement = connection.createStatement();
        //5. 执行sql语句并获取返回结果 executeUpdate执行 delete sql语句
        String delSQL = "delete from  student where id=" + id;
        System.out.println("delSql:" + delSQL);
        // log输出
        int result = statement.executeUpdate(delSQL);
        // 执行该sql语句 影响行数
        return result;
    } catch (Exception e) {
        e.printStackTrace();
        return 0;
    } finally {
        //  7. 释放jdbc资源
        try {
            if (statement != null)
                statement.close();
            if (connection != null)
                connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}

}

我们需要讨论与分层架构
分层架构
entity—实体类----创建实体类与数据库表结构字段一一对应的
dao----数据库访问层----db打交道
serivce—业务逻辑层
controller—控制层
1.导入mysql驱动jar包;
2.注册驱动 javase 反射机制Class.forName()
3.获取数据库连接
4.获取执行者对象
5.执行sql语句并获取返回结果
6.对结果进行处理
7.释放jdbc资源

在src目录下创建config.properties配置文件

driverClass=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mayikt?serverTimezone=UTC
user=root
password=123

.编写jdbc工具 获取连接 释放连接

类名称.方法名称
public class MayiktJdbcUtils {
/**
* 1.需要将我们的构造方法私有化 —工具类 不需要 new出来 是通过类名称.方法名称访问
*/
private JdbcUtils() {

}

/**
 * 2.定义工具类 需要 声明 变量
 */
private static String driverClass;
private static String url;
private static String user;
private static String password;

/**
 *3.使用静态代码快 来给我们声明好 jdbc变量赋值(读取config.properties)
 */
static {
    try {
        // 1.读取config.properties  IO 路径 相对路径
        InputStream resourceAsStream = JdbcUtils.class.getClassLoader().
                getResourceAsStream("config.properties");
        // 2.赋值给我们声明好的变量
        Properties properties = new Properties();
        properties.load(resourceAsStream);
        driverClass = properties.getProperty("driverClass");
        url = properties.getProperty("url");
        user = properties.getProperty("user");
        password = properties.getProperty("password");
        // 3.注册驱动类
        Class.forName(driverClass);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 4.封装连接方法
 */
public static Connection getConnection() {
    try {
        Connection connection = DriverManager.getConnection(url, user, password);
        return connection;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

/**
 * 5.封装释放连接方法 (重载)
 */
public static void closeConnection(ResultSet resultSet, Statement statement, Connection connection) {
    // 1.查询 释放连接 resultSet  statement connection
    try {
        if (resultSet != null)
            resultSet.close();
        if (statement != null)
            statement.close();
        if (connection != null)
            connection.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    // 2.增删改 释放连接 statement connection
}

/**
 * 增删改---释放jdbc资源
 *
 * @param statement
 * @param connection
 */
public static void closeConnection(Statement statement, Connection connection) {
    // 1.查询 释放连接 resultSet  statement connection
    closeConnection(null, statement, connection);
    }
}

感兴趣的小伙伴可以去试一试哦!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值