package javabean;

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

public class Base {
	private static String driver = "com.mysql.cj.jdbc.Driver";
	private static String url = "jdbc:mysql://localhost:3306/library?&useSSL=false&serverTimezone=UTC&userUnicode=true&characterEncoding=UTF-8";
	private static String username = "root";
	private static String password = "root";

	/**
	 * 获取数据库连接
	 * 
	 * @return
	 * @throws ClassNotFoundException
	 */
	public static Connection getConnection() throws ClassNotFoundException {
		Connection connection = null;
		try {
			Class.forName(driver);
			connection = (Connection) DriverManager.getConnection(url, username, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}

	/**
	 * 公共查询
	 * 
	 * @param connection
	 *            连接
	 * @param preparedStatement
	 * @param resultSet
	 *            结果集
	 * @param sql
	 * @param params
	 * @return
	 * @throws SQLException
	 */
	public static ResultSet executequery(Connection connection, PreparedStatement preparedStatement,
			ResultSet resultSet, String sql, Object[] params) throws SQLException {
		if (preparedStatement == null) {
			preparedStatement = (PreparedStatement) connection.prepareStatement(sql);
		}
		for (int i = 0; params != null && i < params.length; i++) {
			preparedStatement.setObject(i + 1, params[i]);
		}
		resultSet = preparedStatement.executeQuery();
		return resultSet;

	}

	/**
	 * 公共修改方法
	 * 
	 * @param connection
	 * @param preparedStatement
	 * @param sql
	 * @param params
	 * @return
	 * @throws SQLException
	 */
	public static int executeUpdate(Connection connection, PreparedStatement preparedStatement, String sql,
			Object[] params) throws SQLException {
		if (preparedStatement == null) {
			preparedStatement = (PreparedStatement) connection.prepareStatement(sql);
		}
		for (int i = 0; params != null && i < params.length; i++) {
			preparedStatement.setObject(i + 1, params[i]);
		}
		int updateRows = preparedStatement.executeUpdate();
		return updateRows;

	}

	/**
	 * 释放资源
	 * 
	 * @param connection
	 * @param preparedStatement
	 * @param resultSet
	 * @return
	 * @throws SQLException
	 */
	public static boolean closeResource(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet)
			throws SQLException {
		boolean flag = true;
		if (resultSet != null) {
			try {
				resultSet.close();
				resultSet = null;
			} catch (SQLException e) {
				e.printStackTrace();
				flag = false;
			}
		}
		if (preparedStatement != null) {
			try {
				preparedStatement.close();
				preparedStatement = null;
			} catch (SQLException e) {
				e.printStackTrace();
				flag = false;
			}
		}
		if (connection != null) {
			try {
				connection.close();
				connection = null;
			} catch (SQLException e) {
				e.printStackTrace();
				flag = false;
			}
		}
		return flag;
	}

}
