JDBC工具类创建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014565127/article/details/89006985

JDBC工具类创建

1. 资源释放工作的整合

JDBCUtil.release(conn, st, rs);

将ResultSet、Statement、Connection的释放放在一个类里。

public class JDBCUtil {
	/**
	 * 释放资源
	 * 
	 * @param conn
	 * @param st
	 * @param rs
	 */
	public static void release(Connection conn, Statement st, ResultSet rs) {
		closeRs(rs);
		closeSt(st);
		closeConn(conn);
	}

	// 释放ResultSet对象
	private static void closeRs(ResultSet rs) {
		System.out.println("释放ResultSet对象");
		try {
			if (rs != null) {
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			rs = null;
		}
	}

	// 释放Statement对象
	private static void closeSt(Statement st) {
		System.out.println("释放Statement对象。");
		try {
			if (st != null) {
				st.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			st = null;
		}
	}

	// 释放数据库连接。
	private static void closeConn(Connection conn) {
		System.out.println("释放数据库连接。");
		try {
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			conn = null;
		}
	}
}

2. 驱动防二次注册

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

Driver这个类里面有静态代码块,一上来就执行了驱动的注册,所以等同于我们注册了两次驱动,其实没这个必要。
参照文档,最后形成以下代码即可:

Class.forName("com.mysql.jdbc.Driver");

3. 建立连接

把建立连接的部分放入一个类。初步整合起来。

public class JDBCUtil {

	static String url = "jdbc:mysql://localhost/factory";
	static String user = "root";
	static String passwd = "0000";

	/**
	 * 建立连接。
	 * 
	 * @return
	 */
	public static Connection getConn() {
		registerDriver();
		Connection conn = null;
		try {
			// 2. 建立连接 参数1:协议+访问数据库 参数2:用户名 参数3:密码
			conn = DriverManager.getConnection(url, user, passwd);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	/**
	 * 注册驱动
	 */
	public static void registerDriver() {
		// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

这样做只是初步进行了整合,我们接下来还要对上述代码进行修改。

4. 使用properties配置文件

现在发现使用JDBC进行连接的各种属性是直接放在代码里的,我们为了方便维护和修改,我们把这些信息都保存在一个文件中,在程序中去读取这个文件,这样以后修改相关信息的时候就直接修改文件就可以了,而不用去代码翻来翻去。

创建properties

在src下声明一个文件jdbc.properties,内容如下:

driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/TABLE
user=username
passwd=password

读取properties

在工具类里面,使用静态代码块,读取属性。
改写上面的部分代码。

static String driverClass = null;
static String url = null;
static String user = null;
static String passwd = null;

static {
	try {
		// 1. 创建一个属性配置对象
		Properties properties = new Properties();
		
		// 2. 把properties文件转化为inputstream流
			
		//方法一:如果把properties文件放在工程的根目录下,可以使用下面的语句读取这个文件
		//InputStream is = new FileInputStream("jdbc.properties");
			
		//方法二:使用类加载器,去读取src目录下的资源文件
		InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
			
		// 3. 导入输入流。
		properties.load(is);
		
		// 4. 读取属性
		driverClass = properties.getProperty("driverClass");
		url = properties.getProperty("url");
		user = properties.getProperty("user");
		passwd = properties.getProperty("passwd");
		} catch (Exception e) {
		e.printStackTrace();
	}
}

在后面注册驱动的时候,参数直接使用上面建立好的driverClass就可以了。

/**
 * 注册驱动
 */
public static void registerDriver() {
	// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
	try {
		Class.forName(driverClass);
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}
}

注册驱动的小细节

我们尝试注释掉注册驱动的语句:

//Class.forName(driverClass);

重新运行程序,发现没有任何问题。那么原因是什么呢,我们看一下
在这里插入图片描述
大意就是4.0版本之后不需要使用Class.forName();语句注册了,它会自动帮我们注册驱动。

总结

我们把JDBC用的一些代码进行整合复用,形成JDBC工具类。主要是资源释放工作的整合,以及驱动的防二次注册,还把建立连接的过程封装起来,并使用properties读取属性,方便以后的维护。

猜你喜欢

转载自blog.csdn.net/u014565127/article/details/89006985
今日推荐