程序开发06

八、项目开发实现步骤

(七)创建数据访问端口实现类

在包里创建impl子包(implementation)
在这里插入图片描述

(一)创建学校数据访问接口实现类

(1),编写按标识符查询记录方法
(2),编写按更新状态记录方法

在impl包里创建CollegeDaolmpl类
在这里插入图片描述
实现CollegeDao 接口alt+enter

在这里插入图片描述
请添加图片描述

package net.yunsiyu.student.dao.impl;
import net.yunsiyu.student.bean.College;
import net.yunsiyu.student.dao.CollegeDao;
import net.yunsiyu.student.dbutil.ConnectionManager;

import java.sql.*;


/**
 * 功能:
 * 作者:云思宇
 * 日期:2023年06月14日
 */
public class CollegeDaoImpl implements CollegeDao {

    @Override
    public College findById(int id) {
        //定义一个学校对象
        College college = null;

        //获取数据库连接
        Connection conn = ConnectionManager.getConnection();
        //定义sql字符串
        String strSQL = "SELECT * FROM t_college WHERE id=?";

        try {
            //创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            //设置占位符的值
            pstmt.setInt(1,id);
            // 执行查询操作返回结果值
            ResultSet rs = pstmt.executeQuery();
            //判断结果集是否为空
            if (rs.next()){
                // 创建学校对象
                college = new College();
                // 利用当前记录的值设置学校对象属性值
                college.setId(rs.getInt("id"));
                college.setName(rs.getString("name"));
                college.setPresident(rs.getString("president"));
                college.setStartTime(rs.getTimestamp("start_time"));
                college.setEmail(rs.getString("email"));
                college.setAddress(rs.getString("address"));
                college.setProfile(rs.getString("profile"));
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            ConnectionManager.closeConnection(conn);//关闭数据库连接
        }

        return college;
    }

    @Override//更新学校记录
    @Override//更新学校记录
    public int update(College college) {
        // 定义更新的记录数
        int count = 0 ;
        //获取数据库连接
        Connection conn = ConnectionManager.getConnection();
        //?是占位符
        String strSQL = "UPDATE t_college SET name = ? , president = ?,start_time = ?,email = ?,address = ?,profile = ? WHERE id = ?";
        //创建预备语句对象
        try {
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            pstmt.setString(1,college.getName());
            pstmt.setString(2,college.getPresident());
            pstmt.setTimestamp(3,new Timestamp(college.getStartTime().getTime()));
            pstmt.setString(4,college.getName());
            pstmt.setString(5,college.getName());
            pstmt.setString(6,college.getName());
            pstmt.setString(7,college.getName());
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            ConnectionManager.closeConnection(conn);//关闭数据库连接
        }


        // 返回更新的记录数
        return 0;
    }
}

(3),测试学校数据访问接口实现类

在test目录里创建net.yunsiyu.student.dao.impl包,在包里创建TestCollegeDaoImpi类
在这里插入图片描述

package net.yunsiyu.student.dao.impl;

import net.yunsiyu.student.bean.College;
import net.yunsiyu.student.dao.CollegeDao;
import org.junit.Test;

/**
 * 功能:
 * 作者:云思宇
 * 日期:2023年06月14日
 */
public class TestCollegeDaoImpl {
    @Test
    public void testFindById(){
        //定于标识符变量
        int id = 1;
        //创建学校数量访问接口对象
        CollegeDao collegeDao = new CollegeDaoImpl();
        //调用该标识符查询学校记录方法
        College college = collegeDao.findById(id);
        //判断查询是否成功
        if (college != null){
            System.out.println("标识符:"+college.getId());
            System.out.println("学校名称:"+college.getName());
            System.out.println("校长:"+college.getPresident());
            System.out.println("建校时间:"+college.getStartTime());
            System.out.println("电子邮箱:"+college.getEmail());
            System.out.println("通讯地址:"+college.getAddress());
            System.out.println("学校概况:"+college.getProfile());

        }else {
            System.out.println("标识符为{+"id"+}的学校记录不存在");

        }
    }
}

运行方法
在这里插入图片描述

(4),测试更新学校数记录方法

在这里插入图片描述

package net.yunsiyu.student.dao.impl;
import net.yunsiyu.student.bean.College;
import net.yunsiyu.student.dao.CollegeDao;
import org.junit.Test;

/**
 * 功能:
 * 作者:云思宇
 * 日期:2023年06月14日
 */
public class TestCollegeDaoImpl {
    @Test
    public void testFindById(){
        //定于标识符变量
        int id = 1;
        //创建学校数量访问接口对象
        CollegeDao collegeDao = new CollegeDaoImpl();
        //调用该标识符查询学校记录方法
        College college = collegeDao.findById(id);
        //判断查询是否成功
        if (college != null){
            System.out.println("标识符:"+college.getId());
            System.out.println("学校名称:"+college.getName());
            System.out.println("校长:"+college.getPresident());
            System.out.println("建校时间:"+college.getStartTime());
            System.out.println("电子邮箱:"+college.getEmail());
            System.out.println("通讯地址:"+college.getAddress());
            System.out.println("学校概况:"+college.getProfile());

        }else {
            System.out.println("标识符为{"+id+"}的学校记录不存在");

        }
    }
    @Test // 测试更新学校记录
    public void testUpdate(){
        // 创建学校数据访问接口对象
        CollegeDao collegeDao = new CollegeDaoImpl();
        // 获取标识符为1的学校记录
        College college = collegeDao.findById(1);
        // 输出更新前的学校信息
        System.out.println("更新前:" + college);
        // 设置学校对象属性
        college.setName("泸职院");
        college.setPresident("奶奶滴");
        college.setProfile("泸职院是要做早操的学校......");
        // 调用更新学校记录方法
        int count = collegeDao.update(college);
        // 判断是否更新成功
        if (count>0){
            System.out.println("恭喜,学校记录更新成功!");
            System.out.println("更新后:" + collegeDao.findById(1));
        }else {
            System.out.println("遗憾,学校记录更新失败!");
        }
    }
}

(二)创建状态数据访问接口实现类

在这里插入图片描述

(1),编写按标识符查询记录方法
package net.yunsiyu.student.dao.impl;


import net.yunsiyu.student.bean.Status;
import net.yunsiyu.student.dao.StatusDao;
import net.yunsiyu.student.dbutil.ConnectionManager;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 功能:状态数据访问窗口实现类
 * 作者:云思宇
 * 日期:2023年06月15日
 */
public class StatusDaoImpl implements StatusDao {
    @Override // 按标识符查询状态记录
    public Status findById(int id) {
        // 定义状态对象
        Status status = null;

        // 获取数据库连接
        Connection conn = ConnectionManager.getConnection();
        // 定义SQL字符串
        String strSQL = "SELECT * FROM t_status WHERE id = ?";
        try {
            // 创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 设置占位符的值
            pstmt.setInt(1, id);
            // 执行查询操作,返回结果集
            ResultSet rs = pstmt.executeQuery();
            // 判断结果集是否为空
            if (rs.next()) {
                // 创建状态对象
                status = new Status();
                // 利用当前记录字段值设置状态对象属性
                status.setId(rs.getInt("id"));
                status.setCollege(rs.getString("college"));
                status.setVersion(rs.getString("version"));
                status.setAuthor(rs.getString("author"));
                status.setTelephone(rs.getString("telephone"));
                status.setAddress(rs.getString("address"));
                status.setEmail(rs.getString("email"));
            }
            // 关闭结果集
            rs.close();
            // 关闭预备语句对象
            pstmt.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            ConnectionManager.closeConnection(conn); // 关闭数据库连接
        }

        // 返回状态对象
        return status;
    }

(2),编写按更新状态记录方法

    @Override // 更新状态记录
    public int update(Status status) {
        // 定义更新记录数
        int count = 0;

        // 获取数据库连接
        Connection conn = ConnectionManager.getConnection();
        // 定义SQL字符串
        String strSQL = "UPDATE t_status SET college = ?, version = ?, author = ?, telephone = ?, address = ?, email = ? WHERE id = ?";
        try {
            // 创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 设位置占位符的值
            pstmt.setString(1, status.getCollege());
            pstmt.setString(2, status.getVersion());
            pstmt.setString(3, status.getAuthor());
            pstmt.setString(4, status.getTelephone());
            pstmt.setString(5, status.getAddress());
            pstmt.setString(6, status.getEmail());
            pstmt.setInt(7, status.getId());
            // 执行更新操作,返回更新记录数
            count = pstmt.executeUpdate();
            // 关闭预备语句对象
            pstmt.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            ConnectionManager.closeConnection(conn); // 关闭数据库连接
        }

        // 返回更新记录数
        return count;
    }
}
(3)测试按标识符查询记录方法

在这里插入图片描述

package net.yunsiyu.student.dao.impl;

/**
 * 功能:
 * 作者:云思宇
 * 日期:2023年06月15日
 */

import net.yunsiyu.student.bean.Status;
import net.yunsiyu.student.dao.StatusDao;
import org.junit.Test;

/**
 * 功能:测试状态数据访问接口实现类
 * 作者:华卫
 * 日期:2023年06月14日
 */
public class TestStatusDaoImpl {
    @Test // 测试按标识符查询状态记录
    public void testFindById() {
        // 定义标识符变量
        int id = 1;
        // 创建状态数据访问接口对象
        StatusDao statusDao = new StatusDaoImpl();
        // 调用按标识符查询状态记录方法
        Status status = statusDao.findById(id);
        // 判断查询是否成功
        if (status != null) {
            System.out.println(status);
        } else {
            System.out.println("标识符为[" + id + "]的状态记录不存在~");
        }
    }
}
(4)测试更新记录方法

    @Test // 测试更新状态记录                                                          
    public void testUpdate() {
        // 创建状态数据访问接口对象                                                        
        StatusDao statusDao = new StatusDaoImpl();
        // 获取标识符为1的状态记录                                                        
        Status status = statusDao.findById(1);
        // 输出更新的状态记录                                                           
        System.out.println("更新前:" + status);
        // 设置状态对象属性                                                            
        status.setCollege("泸州职业技术学院");
        status.setVersion("2.0");
        status.setVersion("无心剑");
        status.setTelephone("15834345670");
        status.setEmail("375912360@qq.com");
        status.setAddress("泸州江阳区上平远路10号");
        // 调用更新状态记录方法                                                          
        int count = statusDao.update(status);
        // 判断更新是否成功                                                            
        if (count > 0) {
            System.out.println("恭喜,状态记录更新成功~");
            System.out.println("更新后:" + statusDao.findById(1));
        } else {
            System.out.println("遗憾,状态记录更新失败~");
        }
    }
    

在这里插入图片描述

(三)创建学生数据访问接口实现类

在这里插入图片描述

(1)编写学生数据访问实现类
package net.yunsiyu.student.dao.impl;

import net.yunsiyu.student.bean.Student;
import net.yunsiyu.student.dao.StudentDao;
import net.yunsiyu.student.dbutil.ConnectionManager;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

/**
 * 功能:学生数据访问实现类
 * 作者:云思宇
 * 日期:2023年06月15日
 */
public class StudentDaoImpl implements StudentDao {
    @Override
    public int insert(Student student) {
        // 定义插入记录数
        int count = 0;
        // 1.获得数据库连接
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "insert into t_student (id, name, sex, age, department, class, telephone)"
                + "values (?, ?, ?, ?, ?, ?, ?)";
        try {
            // 3.创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 4.设置占位符的值
            pstmt.setString(1, student.getId());
            pstmt.setString(2, student.getName());
            pstmt.setString(3, student.getSex());
            pstmt.setInt(4, student.getAge());
            pstmt.setString(5, student.getDepartment());
            pstmt.setString(6, student.getClazz());
            pstmt.setString(7, student.getTelephone());
            // 5.执行SQL,返回插入记录数
            count = pstmt.executeUpdate();
            // 6.关闭预备语句对象
            pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }

        // 返回插入记录数
        return count;
    }

    @Override
    public int deleteById(String id) {
        // 定义删除记录
        int count = 0;

        // 1.获取数据库连接
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "delete from t_student where id = ?";
        try {
            // 3.创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 4.设置占位符的值
            pstmt.setString(1, id);
            // 5.执行SQL,返回删除记录数
            count = pstmt.executeUpdate();
            // 6.关闭预备语句对象
            pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }

        // 返回删除记录数
        return count;
    }

    @Override
    public int deleteByClass(String clazz) {
        // 定义删除记录数
        int count = 0;

        // 1.获取数据库连接
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "delete from t_student where class = ?";
        try {
            // 3.创建数据库语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 4.设置占位符的值
            pstmt.setString(1, clazz);
            // 5.执行SQL,返回删除记录数
            count = pstmt.executeUpdate();
            // 6.关闭预备语句对象
            pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }

        // 返回删除记录数
        return count;
    }

    @Override
    public int deleteByDepartment(String department) {
        // 定义删除记录数
        int count = 0;

        // 1.获得数据库连接
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "delete from t_student where department = ?";
        try {
            // 3.创建预备语句
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 4.设置占位符的值
            pstmt.setString(1, department);
            // 5.执行SQL,返回删除记录数
            count = pstmt.executeUpdate();
            // 6.关闭预备语句对象
            pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }

        // 返回删除记录
        return count;
    }

    @Override
    public int update(Student student) {
        // 定义更新记录数
        int count = 0;

        // 1.获得数据库连接
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "update t_student set name = ?, sex = ?, age = ?,"
                + "department = ?, class = ?, telephone = ? where id = ?";
        try {
            // 3.创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 4.设置占位符的值
            pstmt.setString(1, student.getName());
            pstmt.setString(2, student.getSex());
            pstmt.setInt(3, student.getAge());
            pstmt.setString(4, student.getDepartment());
            pstmt.setString(5, student.getClazz());
            pstmt.setString(6, student.getTelephone());
            pstmt.setString(7, student.getId());
            // 5.执行SQL,返回更新记录数
            count = pstmt.executeUpdate();
            // 6.关闭预备语句对象
            pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }

        // 返回更新记录数
        return count;
    }

    @Override
    public Student findById(String id) {
        // 声明学生对象
        Student student = null;

        // 1.获取数据库连接对象
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "select * from t_student where id = ?";
        try {
            // 3.创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 4.设置占位符的值
            pstmt.setString(1, id);
            // 5.执行SQL,返回结果集
            ResultSet rs = pstmt.executeQuery();
            // 6.判断结果集是否有记录
            if (rs.next()) {
                // 创建学生实体
                student = new Student();
                // 利用当前记录各字段值设置学生实体属性
                student.setId(rs.getString("id"));
                student.setName(rs.getString("name"));
                student.setSex(rs.getString("sex"));
                student.setAge(rs.getInt("age"));
                student.setDepartment(rs.getString("department"));
                student.setClazz(rs.getString("class"));
                student.setTelephone(rs.getString("telephone"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }

        // 返回学生对象
        return student;
    }

    @Override
    public List<Student> findByName(String name) {
        // 声明学生列表
        List<Student> students = new ArrayList<>();

        // 1.获取数据库连接对象
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "select * from t_student where name like ?";
        try {
            // 3.创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 4.设置占位符的值
            pstmt.setString(1, name + "%");
            // 5.执行SQL,返回结果集
            ResultSet rs = pstmt.executeQuery();
            // 6.遍历结果集
            while (rs.next()) {
                // 创建学生实体
                Student student = new Student();
                // 利用当前记录各字段值学生实体属性
                student.setId(rs.getString("id"));
                student.setName(rs.getString("name"));
                student.setSex(rs.getString("sex"));
                student.setAge(rs.getInt("age"));
                student.setDepartment(rs.getString("department"));
                student.setClazz(rs.getString("class"));
                student.setTelephone(rs.getString("telephone"));
                // 将实体添加到学生列表
                students.add(student);
            }
            // 7.关闭结果集
            rs.close();
            // 8.关闭预备语句对象
            pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }

        // 返回学生列表
        return students;
    }

    @Override
    public List<Student> findByClass(String clazz) {
        // 声明学生列表
        List<Student> students = new ArrayList<>();

        // 1.获取数据库连接对象
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "select * from t_student where class like ?";
        try {
            // 3.创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 4.设置占位符的值
            pstmt.setString(1, clazz + "%");
            // 5.执行SQL,返回结果集
            ResultSet rs = pstmt.executeQuery();
            // 6.遍历结果集
            while (rs.next()) {
                // 创建学生实体
                Student student = new Student();
                // 利用当前记录各字段值设置学生实体属性
                student.setId(rs.getString("id"));
                student.setName(rs.getString("name"));
                student.setSex(rs.getString("sex"));
                student.setAge(rs.getInt("age"));
                student.setDepartment(rs.getString("department"));
                student.setClazz(rs.getString("class"));
                student.setTelephone(rs.getString("telephone"));
                // 将实体添加到学生列表
                students.add(student);
            }
            // 7.关闭结果集
            rs.close();
            // 8.关闭预备语句对象
            pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }
        return students;
    }

    @Override
    public List<Student> findByDepartment(String department) {
        // 声明学生列表
        List<Student> students = new ArrayList<>();

        // 1.获取数据库连接对象
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "select * from t_student where departemt like ?";
        try {
            // 3.创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 4.设置占位符的值
            pstmt.setString(1, department + "%");
            // 5.执行SQL,返回结果集
            ResultSet rs = pstmt.executeQuery();
            // 6.遍历结果集
            while (rs.next()) {
                // 创建学生实体
                Student student = new Student();
                // 利用当前记录各字段值设置学生实体属性
                student.setId(rs.getString("id"));
                student.setName(rs.getString("name"));
                student.setSex(rs.getString("sex"));
                student.setAge(rs.getInt("age"));
                student.setDepartment(rs.getString("department"));
                student.setClazz(rs.getString("class"));
                student.setTelephone(rs.getString("telephone"));
                // 将实体添加到学生列表
                students.add(student);
            }
            // 7.关闭结果集
            rs.close();
            // 8.关闭预备语句对象
            pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }
        // 返回学生列表
        return students;
    }

    @Override
    public List<Student> findAll() {
        // 声明学生列表
        List<Student> students = new ArrayList<>();

        // 1.获取数据库连接对象
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "select * from t_student";
        try {
            // 3.创建预备语句对象
            Statement stmt = conn.createStatement();
            // 4.执行SQL,返回结果集
            ResultSet rs = stmt.executeQuery(strSQL);
            // 5.遍历结果集
            while (rs.next()) {
                // 创建学生实体
                Student student = new Student();
                // 利用当前记录各字段值设置学生实体属性
                student.setId(rs.getString("id"));
                student.setName(rs.getString("name"));
                student.setSex(rs.getString("sex"));
                student.setAge(rs.getInt("age"));
                student.setDepartment(rs.getString("department"));
                student.setClazz(rs.getString("class"));
                student.setTelephone(rs.getString("telephone"));
                // 将实体添加到学生列表
                students.add(student);
            }
            // 6.关闭结果集
            rs.close();
            // 7.关闭预备语句对象
            stmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }
        return students;
    }

    @Override
    public Vector findRowsBySex() {
        // 定义行集向量
        Vector rows = new Vector();

        // 1.获取数据库连接对象
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "select sex as '性别', count(*) as '人数'" +
                "from t_student group by sex order by sex desc";
        try {
            // 3.创建预备语句对象
            Statement stmt = conn.createStatement();
            // 4.执行SQL,返回结果集
            ResultSet rs = stmt.executeQuery(strSQL);
            // 5.遍历结果集
            while (rs.next()) {
                // 定义当前行向量
                Vector<String> currentRow = new Vector();
                // 利用当前记录字段值设置当前行向量的元素值
                currentRow.addElement(rs.getString("性别"));
                currentRow.addElement(rs.getInt("人数") + "");
                // 将当前行向量添加到行集向量
                rows.addElement(currentRow);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }
        return rows;
    }

    @Override
    public Vector findRowsByClass() {
        // 定义行集向量
        Vector rows = new Vector();

        // 1.获取数据库连接对象
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "select class as '班级', count(*) as '人数'" +
                "from t_student group by class order by class desc";
        try {
            // 3.创建预备语句对象
            Statement stmt = conn.createStatement();
            // 4.执行SQL,返回结果集
            ResultSet rs = stmt.executeQuery(strSQL);
            // 5.遍历结果集
            while (rs.next()) {
                // 定义当前行向量
                Vector<String> currentRow = new Vector();
                // 利用当前记录字段值设置当前行向量的元素值
                currentRow.addElement(rs.getString("性别"));
                currentRow.addElement(rs.getInt("人数") + "");
                // 将当前行向量添加到行集向量
                rows.addElement(currentRow);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }
        return rows;
    }

    @Override
    public Vector findRowsByDepartment() {
        // 定义行集向量
        Vector rows = new Vector();

        // 1.获取数据库连接对象
        Connection conn = ConnectionManager.getConnection();
        // 2.定义SQL字符串
        String strSQL = "select department as '系部', count(*) as '人数'" +
                "from t_student group by department order by department desc";
        try {
            // 3.创建预备语句对象
            Statement stmt = conn.createStatement();
            // 4.执行SQL,返回结果集
            ResultSet rs = stmt.executeQuery(strSQL);
            // 5.遍历结果集
            while (rs.next()) {
                // 定义当前行向量
                Vector<String> currentRow = new Vector();
                // 利用当前记录字段值设置当前行向量的元素值
                currentRow.addElement(rs.getString("性别"));
                currentRow.addElement(rs.getInt("人数") + "");
                // 将当前行向量添加到行集向量
                rows.addElement(currentRow);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }

        // 返回行集向量
        return rows;
    }

    @Override
    public Student findById(int id) {
        return null;
    }
}

(2)测试学生数据访问接口类

在这里插入图片描述
代码

package net.yunsiyu.student.dao.impl;

/**
 * 功能:测试学生查询
 * 作者:云思宇
 * 日期:2023年06月16日
 */

import net.yunsiyu.student.bean.Student;
import net.yunsiyu.student.dao.StudentDao;
import org.junit.Test;

import java.util.Iterator;
import java.util.List;
import java.util.Vector;

/**
 * 功能:
 * 作者:云思宇
 * 日期:2023年06月15日
 */
public class TestStudentDaoImpl {
    // 定义学生数据访问对象
    StudentDao dao = new StudentDaoImpl();

    @Test
    public void testInsert() {
        // 创建学生对象
        Student student = new Student();
        // 设置学生对象属性
        student.setId("22262161");
        student.setName("帅比");
        student.setSex("男");
        student.setAge(19);
        student.setDepartment("人工智能与大数据学院");
        student.setClazz("2022级软件3班");
        student.setTelephone("17360556276");
        // 调用学生数据访问对象的插入方法
        int count = dao.insert(student);
        // 判断学生记录是否插入成功
        if (count > 0) {
            System.out.println("恭喜,学生记录插入成功!");
            System.out.println(dao.findById(student.getId()));
        } else {
            System.out.println("遗憾,学生记录插入失败!");
        }
    }

    @Test
    public void testDeleById() {
        String id = "19204091";
        // 调用学生数据访问对象的按id删除方法
        int count = dao.deleteById(id);
        // 判断学生记录是否删除成功
        if (count > 0) {
            System.out.println("恭喜,学生记录删除成功!");
        } else {
            System.out.println("遗憾,学生记录删除失败!");
        }
    }

    @Test
    public void testDeleByClass() {
        String clazz = "2022营销1班";
        // 调用学生数据访问对象的按班级删除方法
        int count = dao.deleteByClass(clazz);
        if (count > 0) {
            System.out.println("恭喜,[" + clazz + "]学生记录删除成功!");
        } else {
            System.out.println("遗憾,[\" + clazz + \"]学生记录删除失败!");
        }
    }

    @Test
    public void testFindByName() {
        String name = "王";
        // 调用学生数据访问对象按姓名查找方法
        List<Student> students = dao.findByName(name);
        // 判断列表里是否有元素
        if (students.size() > 0) {
            // 通过增强for循环遍历学生列表
            for (Student student : students) {
                System.out.println(student);
            }
        } else {
            System.out.println("温馨提示:查无此人!");
        }
    }

    @Test
    public void testFindAll() {
        // 调用学生数据访问对象的查找全部方法
        List<Student> students = dao.findAll();
        // 通过增强for循环遍历学生列表
        for (Student student : students) {
            System.out.println(student);
        }
    }

    @Test
    public void testFindRowsBySex() {
        // 调用学生数据访问对象的按性别统计人数方法、
        Vector rows = dao.findRowsBySex();
        // 获取向量的迭代器
        Iterator iterator = rows.iterator();
        // 遍历迭代器
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

运行结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(一)创建用户数据访问接口实现类

(1)编写用户数据访问接口类
package net.yunsiyu.student.dao.impl;

import net.yunsiyu.student.bean.User;
import net.yunsiyu.student.dao.UserDao;
import net.yunsiyu.student.dbutil.ConnectionManager;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 功能:
 * 作者:云思宇
 * 日期:2023年06月16日
 */
public class UserDaoImpl implements UserDao {

    @Override
    public int insert(User user) {
        int count = 0;

        Connection conn = ConnectionManager.getConnection();

        String strSQL = "INSERT INTO t_user (username, password, telephone, register_time)"
                + " value (?, ?, ?, ?)";
        if (!isUsernameExisted(user.getUsername())) {
            try {
                PreparedStatement pstmt = conn.prepareStatement(strSQL);
                pstmt.setString(1, user.getUsername());
                pstmt.setString(2, user.getPassword());
                pstmt.setString(3, user.getTelephone());
                pstmt.setTimestamp(4, new Timestamp(user.getRegisterTime().getTime()));
                count = pstmt.executeUpdate();
                pstmt.close();
            } catch (SQLException e) {
                System.err.println(e.getMessage());
            } finally {
                ConnectionManager.closeConnection(conn);
            }
        }
        return count;
    }

    @Override
    public int deleteById(int id) {
        int count = 0;

        Connection conn = ConnectionManager.getConnection();

        String strSQL = "DELETE FROM t_user WHERE id = ?";
        try {
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            pstmt.setInt(1, id);
            count = pstmt.executeUpdate();
            pstmt.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            ConnectionManager.closeConnection(conn);
        }
        return count;
    }

    @Override
    public int update(User user) {
        int count = 0;

        Connection conn = ConnectionManager.getConnection();

        String strSQL = "UPDATE t_user SET username = ?, password = ?, telephone = ?,"
                + "register_time = ? WHERE id = ?";
        try {
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            pstmt.setString(1, user.getUsername());
            pstmt.setString(2, user.getPassword());
            pstmt.setString(3, user.getTelephone());
            pstmt.setTimestamp(4, new Timestamp(user.getRegisterTime().getTime()));
            count = pstmt.executeUpdate();
            pstmt.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            ConnectionManager.closeConnection(conn);
        }
        return count;
    }

    @Override
    public User findById(int id) {
        User user = null;

        Connection conn = ConnectionManager.getConnection();

        String strSQL = "SELECT * FROM t_user WHERE id = ?";
        try {
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            pstmt.setInt(1, id);
            ResultSet rs = pstmt.executeQuery();
            if (rs.next()) {
                user = new User();
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                user.setTelephone(rs.getString("telephone"));
                user.setRegisterTime(rs.getTimestamp("register_time"));
            }
            pstmt.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            ConnectionManager.closeConnection(conn);
        }
        return user;
    }

    @Override
    public List<User> findAll() {
        List<User> users = new ArrayList<User>();

        Connection conn = ConnectionManager.getConnection();

        String strSQL = "SELECT * FROM t_user";
        try {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(strSQL);
            while (rs.next()) {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                user.setTelephone(rs.getString("telephone"));
                user.setRegisterTime(rs.getTimestamp("register_time"));
                users.add(user);
            }
            rs.close();
            stmt.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            ConnectionManager.closeConnection(conn);
        }
        return users;
    }

    @Override
    public User login(String username, String password) {
        User user = null;

        Connection conn = ConnectionManager.getConnection();

        String strSQL = "SELECT * FROM t_user WHERE username = ? and password = ?";
        try {
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            ResultSet rs = pstmt.executeQuery();
            if (rs.next()) {
                user = new User();
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                user.setTelephone(rs.getString("telephone"));
                user.setRegisterTime(rs.getTimestamp("register_time"));
            }
            pstmt.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            ConnectionManager.closeConnection(conn);
        }
        return user;
    }

    @Override
    public Boolean isUsernameExisted(String username) {
        boolean existed = false;

        Connection conn = ConnectionManager.getConnection();

        String strSQL = "SELECT * FROM t_user WHERE username = ?";
        try {
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            pstmt.setString(1, username);
            ResultSet rs = pstmt.executeQuery();
            if (rs.next()) {
                existed = true;
            }
            pstmt.close();
            rs.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            ConnectionManager.closeConnection(conn);
        }
        return existed;
    }
}

(2),测试用户接口类记录方法

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值