package com.cn.test;

import java.sql.SQLException;

import com.cn.dao.MemberDao;
import com.cn.dao.impl.MemberDaoImpl;
import com.cn.domain.Member;
import com.cn.util.DateUtil;

/**
 * 这个类是 `MemberDao`（数据访问对象，用于操作与会员相关的数据）的测试类，
 * 通过在 `main` 方法中调用 `MemberDao` 实现类 `MemberDaoImpl` 的不同方法，
 * 来测试对会员数据进行添加、删除、查询等数据库操作的功能是否能正常执行，
 * 若出现 `SQLException` 异常（比如数据库连接问题、SQL语法错误等情况）则会进行相应的异常处理。
 */
public class MemberDaoTest {

    public static void main(String[] args) {
        // 创建 `MemberDao` 接口的具体实现类 `MemberDaoImpl` 的实例，
        // 通过该实例来调用 `MemberDao` 中定义的各种操作会员数据的方法，如添加、删除、查询等。
        MemberDao memberDao = new MemberDaoImpl();

        // 以下这行代码被注释掉了，原本可能是用于创建一个新的 `Member` 对象，
        // 并通过构造函数传入会员的相关信息（用户名、密码、注册时间、某个计数值以及可能的更新时间等，具体要看 `Member` 类的构造函数定义），
        // 然后将该对象作为参数传递给 `memberDao.add` 方法来尝试向数据库中添加会员信息，当前注释掉意味着暂不执行添加操作的测试。
        // Member member = new Member("ljy","123456",DateUtil.now(),0,DateUtil.now());

        try {
            // 以下这行代码被注释掉了，若取消注释，会调用 `memberDao.add` 方法，将前面创建的 `Member` 对象（如果取消上面的注释创建了对象的话）传递进去，
            // 尝试向数据库中插入一条新的会员记录，`memberDao.add` 方法内部会构建合适的SQL插入语句，与数据库建立连接并执行插入操作，
            // 该方法返回值通常表示受影响的数据库记录行数，在成功插入一条记录的情况下，一般返回值为1，这里将其打印输出以查看添加操作是否成功执行。
            // System.out.println(memberDao.add(member));

            // 以下这行代码被注释掉了，若取消注释，会调用 `memberDao.delete` 方法，并传入会员的标识（这里传入硬编码值2，代表要删除的会员记录的ID，仅作为测试示例，实际应用中应根据具体业务需求获取要删除的会员ID），
            // 该方法内部会构建相应的SQL删除语句，在数据库中查找并删除对应的会员记录，处理数据库连接以及执行删除操作等相关事宜，
            // 返回值通常表示受影响的数据库记录行数，若成功删除对应的会员记录，返回值一般为1；若数据库中不存在该ID对应的记录，则返回值为0，
            // 将返回的结果打印输出，便于查看删除操作是否按预期成功执行。
            // System.out.println(memberDao.delete(2));

            // 调用 `memberDao.getAll` 方法，该方法会构建相应的SQL查询语句，从数据库中获取所有的会员记录，
            // 并将查询到的会员信息封装为 `Member` 对象列表返回，然后通过循环遍历该列表，将每个 `Member` 对象打印输出，
            // 以此来查看查询所有会员信息的功能是否能正确执行，查看返回的会员信息是否符合预期。
            for (Member member2 : memberDao.getAll()) {
                System.out.println(member2);
            }

            // 以下这行代码被注释掉了，若取消注释，会调用 `memberDao.getMemberById` 方法，并传入会员的标识（这里传入硬编码值2，代表要获取的会员记录的ID，仅作为测试示例，实际应用中根据具体业务场景传入相应会员ID），
            // 该方法内部会构建合适的SQL查询语句，根据传入的会员ID在数据库中查找并获取对应会员记录，将查询到的会员信息封装为 `Member` 对象返回，
            // 以便后续进行展示或其他处理，这里将返回的 `Member` 对象打印输出，便于查看按ID查询会员信息的功能是否正确执行。
            // System.out.println(memberDao.getMemberById(2));

            // 调用 `memberDao.getMemberByName` 方法，并传入会员名称 "lisi"（这里是硬编码示例，实际应用中根据具体业务场景传入相应会员名称），
            // 该方法内部会构建相应的SQL查询语句（可能是根据名称进行模糊查询或者精确查询等，具体看实现逻辑），在数据库中查找并获取名称匹配的会员记录，
            // 将查询到的会员信息封装为 `Member` 对象返回，这里将返回的 `Member` 对象打印输出，便于查看按名称查询会员信息的功能是否能正确执行。
            System.out.println(memberDao.getMemberByName("lisi"));
        } catch (SQLException e) {
            // 如果在执行上述数据库操作（如查询所有会员、按名称查询会员等操作）的过程中出现了 `SQLException` 异常，
            // 通过 `e.printStackTrace()` 方法打印异常的栈追踪信息，方便开发人员排查问题所在，确定是哪部分代码或者数据库相关配置导致了异常的出现。
            e.printStackTrace();
        }
    }
}