Java自己封装一个DBUtils的Demo

1、我们先将数据库连接相关的字段放在配置文件当中:

# .properties文件,#代表注释

#对于mysql的字段
driver=com.mysql.jdbc.Driver

#rewriteBatchedStatements=true 设置批处理
url=jdbc:mysql://localhost:3306/test?useSSL=true&rewriteBatchedStatements=true
user_name=root
user_pwd=123456

2、将连接数据库相关字段放在一个接口当中:

public interface DBHandler {

	public static String DRIVER="driver";
	public static String USER_NAME="user_name";
	public static String USER_PWD="user_pwd";
	public static String URL="url";
	
	
}

DBUtil封装:

public class DBUtil {

	// 对于数据库操作以下字段,不希望在此工具类中进行修改,我们将这些字段的信息放到配置文件中
	static String DRIVER = ""; // 数据库加载的驱动
	static String USER_NAME = ""; // 数据库用户名
	static String USER_PWD = ""; // 密码
	static String URL = ""; // 数据库路径

	static Properties p = null;
	static {
		// 对静态成员进行初始化
		// 将p与我们的配置文件进行关联
		p = new Properties();
		try {
			p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("DBConfig.properties"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		// getProperty(key)中的key值不进行传入,因为此处手动输入可能会找不到。我们将字段封装起来
		// 另外,如果这些字段值发生改变,我们也不需要更改此类,而是修改DBHandler
		DRIVER = getValue(DBHandler.DRIVER);
		USER_NAME = getValue(DBHandler.USER_NAME);
		USER_PWD = getValue(DBHandler.USER_PWD);
		URL = getValue(DBHandler.URL);

		// 加载驱动
		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	/*
	 * 获取配置文件对应的值
	 */
	private static String getValue(String key) {
		if (key == null || "".equals(key)) {
			throw new RuntimeException("传入参数有误");
		}
		return p.getProperty(key);
	}

	/**
	 * 获取连接
	 * 
	 * @return
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(URL, USER_NAME, USER_PWD);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	/**
	 * 获取Statement
	 * 
	 * @param conn
	 *            数据库连接
	 * @return
	 */
	public static Statement getstmt(Connection conn) {
		Statement stmt = null;
		try {
			stmt = conn.createStatement();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return stmt;
	}

	/**
	 * 关闭数据库连接
	 * 
	 * @param conn
	 */
	public static void closeConn(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * 关闭Statement
	 * @param stmt
	 */
	public static void closeStmt(Statement stmt){
		if(stmt!=null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * 关闭结果集
	 * @param rs
	 */
	public static void closeRs(ResultSet rs){
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * 关闭数据库相关的所有资源
	 * @param conn  数据连接
	 * @param stmt  Statement
	 * @param rs	ResultSet
	 */
	public static void closeAll(Connection conn,Statement stmt,ResultSet rs){
		closeConn(conn);
		closeStmt(stmt);
		closeRs(rs);
	}

}

对于已经封装好的DBUtil进行测试:

public class Test01 {
	public static void main(String[] args) throws SQLException {
		Connection conn=DBUtil.getConnection();
		Statement stmt=DBUtil.getstmt(conn);
		String sql="SELECT * FROM USER";
		ResultSet rs=null;
		try {
			rs = stmt.executeQuery(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		while(rs.next()){
			System.out.println(rs.getString("uname"));
		}
		DBUtil.closeAll(conn, stmt, rs);
		
	}

}

注:这些虽然是很基础的知识,但是这样的Demo练习能够提高我们封装的思想,对于不断重复编写的代码应该提取出来进行封装。

猜你喜欢

转载自blog.csdn.net/ToBe_Coder/article/details/81916224
今日推荐