使用连接池连接数据库

连接数据库的步骤

我在网上看到的一个教程,感觉那个老师总结的特别好,他是引用<红楼梦>中的人物,将连接数据库的步骤进行了总结。
“贾琏欲执事”
贾:加载注册驱动。
琏:连接数据库
欲:获取预编译语句对象
执:执行预编译语句
事:释放资源

导入jar包

在这里插入图片描述
红线标注的就是导入的jar包,jar包可以直接去官网下载,下载完之后,直接复制到web-inf下的lib下就行。commons-pool-1.6.jar是连接池的jar包。

新学者可以先不用连接池

(这是注册用户时用到的代码,主要是sql语句不一样,就可以实现不同的功能)

//1.加载注册驱动
        		Class.forName("com.mysql.jdbc.Driver");
        		//2.连接数据库 建立连接
        		//url:  jdbc:mysql://主机地址:端口号/数据库
        		//user:数据库的用户名
        		//pwd:密码
        		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/user","root","123456");
        		//3.创建sql语句
        		String sql = "insert into user(Name,Password)values('"+user+"','"+pwd+"')";
        		//4.创建一个statement对象
        		Statement st = conn.createStatement();
        		//5.执行插入sql
        		int rs = st.executeUpdate(sql);
        		System.out.println(rs);
        		//6.关闭连接 释放资源
        		st.close();
        		conn.close();

使用连接池,使用配置文件连接数据库

为什么使用配置文件?
其实这里也用到了封装的思想,就是减少代码的耦合性。使用配置文件的好处:举个例子,当你在北京的一个公司上班,你把一个项目买到了新疆(意思就是很远的地方)。由于买方需要重新建立数据库,或者用自己公司的数据库,那么数据库名,密码什么的也就不一样了。如果买方懂编程还好,你可以告诉他改那一包下面的代码。但是,在公司的忌讳是严禁看源码的,这里涉及到知识产权的问题。所以就假设买方不懂源码。假设能看你的源码,你也不能让它改啊,因为他根本看不懂,再改到其他地方,那你的代码离崩溃也不远。这里就配置文件就解决了这个尴尬的问题。
在src下右键new->folder(相当于文件夹)把数据库配置问件放在下面。因为以后如果开发大型项目,不可能只有一个配置文件,这是便于管理配置文件。

在这里插入图片描述
这里我用的是db.properties,后缀是properties就是配置文件。配置文件的底层用的也是hashmap就是一个key,一个value。

对创键好的配置文件进行设置

#key=values格式
#连接数据库的四要素
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbcdemo(数据库名称)
username=root(数据名)
password=123456(密码)

读取配置文件里的内容,获取连接对象,关闭连接

一般加载注册驱动只需要加载注册一次就行了,这样我们就想到静态代码块。只需要在程序启动是加载一次就行了。读取配置文件中的内容,我们想到了反射,只需要一个全限定名称就可以获取配置文件类,获取到里面的字段属性和方法。

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

public class DBUtil {
	private static Properties p = new Properties();//获取配置文件对象
	private static DataSource ds = null;//数据源对象为null
	// 1.加载注册驱动
	static {
		// 获取配置文件,转换成一个输入流
		try {
			p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));//从配置文件中读取配置信息
			// 获取数据源对象
			ds = BasicDataSourceFactory.createDataSource(p);//这是从连接池中获取连接对象    
		} catch (Exception e) {    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// 2.获取连接对象
	public static Connection getConn() {
		Connection conn = null;
		try {
			conn = ds.getConnection();//获取连接对象
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;//返回连接对象
	}

	// 3.关闭连接
	public static void clossAll(Connection conn, Statement st, ResultSet rs) {
   //关闭连接遵循先开的最后关闭,不过关之前先看看是否为null,如果为null,就不需要关闭
		try {
			if (rs != null) {
				rs.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (st != null) {
					st.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} finally {
				try {
					if (conn != null) {
						conn.close();
					}
				} catch (Exception e2) {
					// TODO: handle exception
				}
			}
		}
	}
}

总结

为什么使用连接池?使用连接池的好处?
直接举个例子,如果你的家在河的一边,你的外婆家在河的另一边。假设没有交通工具可以过河,你只能通过架设一个桥来到你的外婆家去。没使用连接池之前,相当于每连接一个数据库你就架设了一个桥,当你到达河的对面,也就是对数据库的操作(增,删,查,改操作),你关闭数据库连接就相当于把桥销毁了。当你再次过河时还要重新架桥。这样就大大增加了cpu的工作量,效率会大大降低。所以,连接池就应运而生。连接池主要思路是,先给你建好几个连接对象,当你使用完毕,它没有销毁,只是返回给连接池,让你下次方便使用。所以这里使用连接池,可以大大增加效率。

猜你喜欢

转载自blog.csdn.net/qq_43580281/article/details/83627442