【数据库课程设计】JDBC接口和类

DAO

DAO(Data Access Object)是一个模式,它用于抽象和封装所有访问数据库的请求。通过DAO,可以将底层的数据访问逻辑和高层的业务逻辑分开,使得代码更加清晰、易于维护。

具体到这段代码,DAOFactory类提供了以下方法:

getIUserDAOInstance() - 创建一个用户信息操作的DAO实例。
getScoreDAOInstance() - 创建一个成绩操作的DAO实例。
getCourseDAOInstance() - 创建一个课程操作的DAO实例。
getStudentDAOInstance() - 创建一个学生操作的DAO实例。
getClassDAOInstance() - 创建一个班级操作的DAO实例。
getTeacherDAOInstance() - 创建一个老师操作的DAO实例。
getArrangeDaoInstance() - 创建一个选课信息操作的DAO实例。
每个方法都返回一个特定类型的DAO对象,这些对象是通过对应的代理(Proxy)类创建的。这些代理类可能是为了提供额外的功能,例如日志记录、事务管理等。

每一个DAO实例当中,都封装好了以下几个操作:
1.连接数据库
2.对数据库中的信息增删改查,如有异常则抛出
3.断开连接

以getIUserDAOInstance()为例:

类的定义和实例化:

    private DataBaseConn dbc = null; // 声明一个私有成员变量dbc,类型为DataBaseConn,用于连接数据库
	private IUserInfoDAO dao = null; // 声明一个私有成员变量dao,类型为IUserInfoDAO,用于操作数据库

	public UserInfoDaoImpIProxy() { // 构造函数
		dbc = new DataBaseConn(); // 创建DataBaseConn对象,并赋值给dbc
		dao = new UserInfoDaoImpI(dbc.getConnection()); // 创建UserInfoDaoImpI对象,使用dbc获取的连接进行初始化,并赋值给dao
	}

DataBaseConn:主要功能就是通过驱动类、数据库地址、端口、数据库名等连接数据库。代码如下:

public class DataBaseConn {
	/**
	 * 数据库的链接类
	 */
	// Mysql 数据库连接类 --查看根目录下的Database_script.sql文件
	// 在发布jar文件时要把mysql驱动一起打包
	private static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
	private static final String DBURL = "jdbc:mysql://localhost:3306/educationmanager?serverTimezone=UTC";
	private static final String DBUSER = "root"; // mysql用户名
	private static final String DBPASS = "nagural1"; // mysql密码
	private Connection conn = null;

	public DataBaseConn() {
		try {
			Class.forName(DBDRIVER);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	// 获取连接
	public Connection getConnection() {
		System.out.println("连接成功!");
		return this.conn;
	}
	// 关闭连接
	public void close() {
		if (this.conn != null) {
			try {
				this.conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

IUserInfoDAO:定义一个公共的接口,名为IUserInfoDAO。接口是一个合同,定义了类必须实现的方法。getIUserDAOInstance()继承了这个接口,所以它需要实现接口内部的函数。
以下是IUserInfoDAO()要求实现的代码:

public interface IUserInfoDAO { // 定义一个公共的接口,名为IUserInfoDAO。接口是一个合同,定义了类必须实现的方法。

	/**
	 * 数据库的增加
	 *
	 * @param user
	 *            要创建的用户信息的对象
	 * @return 如果创建成功,返回true;否则返回false
	 * @throws Exception
	 *             在创建过程中可能抛出的异常
	 */
	public boolean doCreate(UserInfo user) throws Exception; // 定义一个公共的doCreate方法,接收一个UserInfo类型的参数,返回一个boolean类型的结果,并可能抛出异常。该方法的注释描述了它是用于数据库的增加操作。

	/**
	 * 修改用户
	 *
	 * @param user
	 *            要修改的用户信息的对象
	 * @return 如果修改成功,返回true;否则返回false
	 * @throws Exception
	 *             在修改过程中可能抛出的异常
	 */
	public boolean doUpdate(UserInfo user) throws Exception; // 定义一个公共的doUpdate方法,接收一个UserInfo类型的参数,返回一个boolean类型的结果,并可能抛出异常。该方法的注释描述了它是用于修改用户的信息。

	/**
	 * 删除用户
	 *
	 * @param username
	 *            要删除的用户名
	 * @return 如果删除成功,返回true;否则返回false
	 * @throws Exception
	 *             在删除过程中可能抛出的异常
	 */
	public boolean doDelete(String username) throws Exception; // 定义一个公共的doDelete方法,接收一个String类型的参数,返回一个boolean类型的结果,并可能抛出异常。该方法的注释描述了它是用于删除用户的信息。

	/**
	 * 数据库查询操作
	 *
	 * @param id
	 *            查询的用户ID
	 * @return 返回查询到的用户信息对象
	 * @throws Exception
	 *             在查询过程中可能抛出的异常
	 */
	public UserInfo findById(String id) throws Exception; // 定义一个公共的findById方法,接收一个String类型的参数,返回一个UserInfo类型的结果,并可能抛出异常。该方法的注释描述了它是用于根据ID查询用户的信息。

	/**
	 * 做查询操作
	 *
	 * @param id
	 *            查询的用户关键字
	 * @return 返回查询到的用户列表
	 * @throws Exception
	 *             在查询过程中可能抛出的异常
	 */  // 此处的方法名称为“findAll”,但注释中写的是“做查询操作”,这可能是一个错误或者误导。根据方法名和参数,这个方法应该是用来根据关键字查询所有匹配的用户信息。所以,这里的注释可能需要修正为类似“根据关键字查询所有匹配的用户”。
	public List<UserInfo> findAll(String keyword) throws Exception;
}  // 接口结束声明。`List<UserInfo>`表示返回的用户信息列表中每个元素都是UserInfo类型的对象。`throws Exception`表示这个方法可能会抛出异常。`IUserInfoDAO`接口定义了数据访问对象的基本操作。`UserInfo`可能是一个表示用户信息的类,但这个类的定义没有在代码中给出。`doCreate`, `doUpdate`, `doDelete`, `findById`, 和 `findAll`等方法分别代表了创建、更新、删除、查询单个用户和查询所有用户的基本数据库操作。每个方法都可能抛出异常,表示在执行这些操作时可能会出现的问题。这样的设计使得这个接口可以被多种不同的实现类来实现,从而可以根据不同的数据库或者数据源来定制具体的实现方式。同时,通过接口的方式也保证了所有使用这个DAO的用户都可以以一致的方式来进行操作。这种设计模式是面向对象程序设计中的常见模式,使得代码更加灵活、可维护性和可复用性都大大提高。                   ```java                   // 以上就是为以上代码添加的详细注释                   ```

以下是getIUserDAOInstance()实现的具体代码块:

	@Override
	public boolean doCreate(UserInfo user) throws Exception { // 实现IUserInfoDAO接口中的doCreate方法,用于增加用户信息
		// 增加用户信息(代理实现)
		boolean flag = true; // 定义一个布尔变量flag,并初始化为true
		try {
			flag = this.dao.doCreate(user); // 调用dao的doCreate方法,尝试增加用户信息,并将返回值赋值给flag
		} catch (Exception e) {
			throw e; // 如果调用dao.doCreate方法时抛出异常,则重新抛出该异常
		} finally {
			this.dbc.close(); // 最后,关闭数据库连接
		}
		return flag; // 返回flag,表示是否成功增加用户信息
	}

	@Override
	public boolean doUpdate(UserInfo user) throws Exception { // 实现IUserInfoDAO接口中的doUpdate方法,用于更新用户信息
		// 更新用户信息(代理实现)
		boolean flag = true; // 定义一个布尔变量flag,并初始化为true
		try {
			flag = this.dao.doUpdate(user); // 调用dao的doUpdate方法,尝试更新用户信息,并将返回值赋值给flag
		} catch (Exception e) {
			throw e; // 如果调用dao.doUpdate方法时抛出异常,则重新抛出该异常
		} finally {
			this.dbc.close(); // 最后,关闭数据库连接
		}
		return flag; // 返回flag,表示是否成功更新用户信息
	}

	@Override
	public boolean doDelete(String username) throws Exception { // 实现IUserInfoDAO接口中的doDelete方法,用于删除用户信息
		// 删除用户信息(代理实现)
		boolean flag = true; // 定义一个布尔变量flag,并初始化为true
		try {
			flag = this.dao.doDelete(username); // 调用dao的doDelete方法,尝试删除用户信息,并将返回值赋值给flag
		} catch (Exception e) {
			throw e; // 如果调用dao.doDelete方法时抛出异常,则重新抛出该异常
		} finally {
			this.dbc.close(); // 最后,关闭数据库连接
		}
		return flag; // 返回flag,表示是否成功删除用户信息
	}

	@Override
	public List<UserInfo> findAll(String keyword) throws Exception { // 实现IUserInfoDAO接口中的findAll方法,用于查找用户信息-关键字查找
		// 查找用户信息-关键字查找(代理实现)
		List<UserInfo> all = null; // 定义一个List<UserInfo>类型的变量all,并初始化为null
		try {
			all = this.dao.findAll(keyword); // 调用dao的findAll方法,尝试查找用户信息,并将返回值赋值给all
		} catch (Exception e) {
			throw e; // 如果调用dao.findAll方法时抛出异常,则重新抛出该异常
		} finally {
			this.dbc.close(); // 最后,关闭数据库连接
		}
		return all; // 返回all,表示是否成功查找到用户信息列表
	}


	@Override  // 注解,表示该方法覆盖了父类或接口中的方法。
	public UserInfo findById(String id) throws Exception {  // 定义一个公共方法,名为findById,输入参数为一个字符串类型的id,该方法可能会抛出异常。返回值类型为UserInfo。
		// 查找用户信息-ID查找(代理实现)  // 注释,说明这个方法是用来根据ID查找用户信息的,是代理实现。
		UserInfo user = null;  // 定义一个UserInfo类型的变量user,并初始化为null。
		try {  // 开始一个try块,用于捕获可能会抛出的异常。
			user = this.dao.findById(id);  // 调用dao对象的findById方法,输入参数为id,返回值为user。因为可能会抛出异常,所以被包装在try块中。
		} catch (Exception e) {  // 如果try块中的代码抛出异常,那么会进入catch块。
			throw e;  // 在catch块中重新抛出捕获到的异常。
		} finally {  // 无论是否发生异常,finally块的代码总是会被执行。
			this.dbc.close();  // 关闭数据库连接。
		}
		return user;  // 返回user变量,表示查找的用户信息。
	}

调用DAO

定义好了以上的DAO以后,就可以在window文件下负责前端的java文件中调用。
以下是在manageAdmin文件中的代码块:

// 当名为 "btnNewButton" 的按钮被点击时,执行此方法。  
protected void btnNewButtonactionPerformed(ActionEvent e) {  
  
 	// 从名为 "textField_4" 的文本框获取文本内容,并将其存储在名为 "name" 的字符串中。  
 	String name = textField_4.getText();  
  
 	// 创建一个新的 UserInfo 对象,并将其引用赋值给变量 "u"。  
 	UserInfo u = new UserInfo();  
  
 	// 尝试执行以下操作:  
 	try {  
  
 	// 从 DAOFactory 中获取 IUserDAOInstance,并调用其 findById 方法,使用 "name" 作为参数,  
 	// 然后将返回的结果赋值给 "u"。此处可能是在数据库中查找具有指定 "name" 的用户信息。  
 	u = DAOFactory.getIUserDAOInstance().findById(name);  
  
 	// 弹出一个对话框,显示与 "u" 关联的信息,并提示用户是否要删除此信息。  
 	// 如果用户选择 "是"(对应的整数为0),则执行下一条语句。  
 	int temp = JOptionPane.showConfirmDialog(null, u.toString(), "要删除的信息", 0);  
  
 	// 如果用户在上一步中选择了 "是",则调用 DAOFactory 中 IUserDAOInstance 的 doDelete 方法,  
 	// 并传入 "name" 作为参数。此操作可能是从数据库中删除具有指定 "name" 的用户信息。  
 	if (temp == 0) {  
 		DAOFactory.getIUserDAOInstance().doDelete(name);  
 	}  
  
 	// 如果在上述操作中发生异常,则捕获该异常,并打印堆栈跟踪信息。  
 	} catch (Exception e1) {  
 		e1.printStackTrace();  
 	}  
  
 	// 调用名为 "initTextFiled" 的方法,可能是重新初始化某些文本字段。  
 	initTextFiled();  
}

逻辑方面注释讲的很清楚啦。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值