JDBC学习笔记(1):建立数据库连接

224 阅读3分钟

JDBC提供了应用程序与数据库之间的接口,不同数据库使用的驱动不同,由数据库开发方提供,使用时需要下载对应的驱动。

public class TestConnection {

	//方式一
	@Test
	public void testConnection1() throws SQLException {
		//设置连接信息
		String url = "jdbc:mysql://localhost:3306/book";//jdbc:mysql:协议;localhost地址;3306端口号;book数据库名
		Properties info = new Properties();
		info.setProperty("user", "root");
		info.setProperty("password", "admin");
		//获取Driver的实现类对象
		Driver driver = new com.mysql.jdbc.Driver();
		//获取连接
		Connection connection = driver.connect(url, info);
		System.out.println(connection);
	}
	
	//方式二:使用反射获取Driver的实现类对象
	@Test
	public void testConnection2() throws Exception {
		//设置连接信息
		String url = "jdbc:mysql://localhost:3306/book";
		Properties info = new Properties();
		info.setProperty("user", "root");
		info.setProperty("password", "admin");
		//获取Driver的实现类对象
		Class clz = Class.forName("com.mysql.jdbc.Driver");
		Driver driver = (Driver)clz.getDeclaredConstructor().newInstance();
		//获取连接
		Connection connection = driver.connect(url, info);
		System.out.println(connection);
	}
	
	//方式三:使用DriverManager方便对一系列Driver操作
	@Test
	public void testConnection3() throws Exception {
		//设置连接信息
		String url = "jdbc:mysql://localhost:3306/book";
		String user = "root";
		String password ="admin";
		//获取Driver的实现类对象
		Class clz = Class.forName("com.mysql.jdbc.Driver");
		Driver driver = (Driver)clz.getDeclaredConstructor().newInstance();
		//注册驱动
		DriverManager.registerDriver(driver);
		//获取连接
		Connection connection = DriverManager.getConnection(url, user, password);
		System.out.println(connection);
	}
	
	//方式四:省略部分操作
	@Test
	public void testConnection4() throws Exception {
		//设置连接信息
		String url = "jdbc:mysql://localhost:3306/book";
		String user = "root";
		String password ="admin";
		//获取Driver的实现类对象+注册驱动
		Class.forName("com.mysql.jdbc.Driver");//类的静态方法中包含了创建类对象和注册驱动的操作
		//获取连接
		Connection connection = DriverManager.getConnection(url, user, password);
		System.out.println(connection);
	}
	
	//方式五:将连接信息放入到一个配置文件中,读取配置文件
	@Test
	public void testConnection5() throws Exception {
		//获取连接信息
		InputStream is = TestConnection.class.getClassLoader().getResourceAsStream("jdbc.properties");
		Properties info = new Properties();//创建一个配置文件,写入连接信息
		info.load(is);
		String user = info.getProperty("user");
		String password = info.getProperty("password");
		String url = info.getProperty("url");
		String driverClass = info.getProperty("driverClass");
		//获取Driver的实现类对象+注册驱动
		Class.forName(driverClass);
		//获取连接
		Connection connection = DriverManager.getConnection(url, user, password);
		System.out.println(connection);
	}
}

方法五将配置文件和建立连接的类信息解耦,所以更推荐使用方法五。由于建立连接的操作经常会用到,所以有必要将其封装成一个JDBCUtils工具类下的getConnection方法,以方法五为例。

InputStream is = TestConnection.class.getClassLoader().getResourceAsStream("jdbc.properties");

这是上面那个版本获取配置信息输入流的操作,在获取配置信息时是从TestConnection类开始定位生成加载器,在封装是不宜再使用其他类的信息,因此可以修改一下。

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");

封装完成的JDBCUtils工具类中getConnection方法如下:

public class JDBCUtils {

	static public Connection getConnection() {
		
		Connection connection = null;
		try {
			//获取连接信息
			InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
			Properties info = new Properties();
			info.load(is);
			String user = info.getProperty("user");
			String password = info.getProperty("password");
			String url = info.getProperty("url");
			String driverClass = info.getProperty("driverClass");
			//获取Driver的实现类对象+注册驱动
			Class.forName(driverClass);
			//获取连接
			connection = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return connection;
	}
}

把jdbc.properties文件也放上来吧

user=root
password=admin
url=jdbc:mysql://localhost:3306/book
driverClass=com.mysql.jdbc.Driver

注意因为我们在获取配置信息时,使用的是系统类加载器,因此要把jdbc.properties放在当前类所处的src目录下。

为了进一步了解Class.getResourceeam和ClassLoader.getResource的区别,我在com.jdbc包下复制粘贴了同样一个jdbc.properties。

运行下列程序

public static void main(String[] args) {
		System.out.println(ClassLoader.getSystemClassLoader().getResource("jdbc.properties"));
		System.out.println(JDBCUtils.class.getClassLoader().getResource("jdbc.properties"));
		System.out.println(JDBCUtils.class.getResource("jdbc.properties"));
}

运行结果

file:/D:/Working/Eclipse/Work_Space/ConnectionTest/bin/jdbc.properties
file:/D:/Working/Eclipse/Work_Space/ConnectionTest/bin/jdbc.properties
file:/D:/Working/Eclipse/Work_Space/ConnectionTest/bin/com/jdbc/jdbc.properties