package javabean;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCBean {
	// 数据库连接信息
	private static String driver = "com.mysql.cj.jdbc.Driver"; // MySQL数据库驱动
	private static String url = "jdbc:mysql://localhost:3306/library?&useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8"; // 数据库URL
	private static String username = "root"; // 数据库用户名
	private static String password = "root"; // 数据库密码

	// 数据库连接对象
	private Connection conn = null;
	// 用于执行SQL查询和更新的Statement对象
	private Statement stmt = null;

	/**
	 * 构造函数，初始化数据库连接
	 *
	 * 该构造函数在创建`JDBCBean`对象时会自动尝试连接到数据库。
	 * 若连接成功，输出连接成功的信息，否则输出错误信息。
	 */
	public JDBCBean() {
		try {
			// 加载MySQL数据库驱动
			Class.forName(driver);
			// 获取数据库连接
			conn = DriverManager.getConnection(url, username, password);
			// 创建Statement对象，用于执行SQL语句
			stmt = conn.createStatement();
			System.out.println("同数据库建立连接！");
		} catch (Exception ex) {
			// 捕获并输出数据库连接错误
			System.out.println("无法同数据库建立连接！");
		}
	}

	/**
	 * 执行更新操作（INSERT、UPDATE、DELETE）
	 *
	 * @param s 需要执行的SQL语句（例如：INSERT、UPDATE、DELETE）
	 * @return 返回更新的记录数，若失败则返回0
	 */
	public int executeUpdate(String s) {
		int result = 0;
		try {
			// 执行SQL更新操作
			System.out.println(s + "------" + stmt + "-----");
			result = stmt.executeUpdate(s);
		} catch (Exception e) {
			// 捕获并输出执行更新错误
			System.out.println("执行更新错误！");
		}
		return result;
	}

	/**
	 * 执行查询操作（SELECT）
	 *
	 * @param s 需要执行的SQL查询语句（例如：SELECT）
	 * @return 返回查询结果集（ResultSet），若失败则返回null
	 */
	public ResultSet executeQuery(String s) {
		ResultSet rs = null;
		try {
			// 执行SQL查询操作
			rs = stmt.executeQuery(s);
		} catch (Exception e) {
			// 捕获并输出查询执行错误
			System.out.println("执行查询错误！ " + e.getMessage());
		}
		return rs;
	}

	/**
	 * 关闭数据库连接和Statement对象
	 *
	 * 该方法会在操作结束后关闭数据库连接和Statement对象，释放资源。
	 */
	public void close() {
		try {
			// 关闭Statement对象
			stmt.close();
			// 关闭数据库连接
			conn.close();
		} catch (Exception e) {
			// 捕获并忽略关闭资源时的异常
		}
	}
}
