Java数据库连接的五种方式(附代码释义)

其实我也觉得有点长,但是不放在一起没有对比对吧
注:所有内容针对的是同一个库(database)

com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别

方式一:

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

import org.junit.jupiter.api.Test;
public class ConnectionTest {
	@Test
 	public void testConnection1() throws Exception{
 	//接口,需要具体的实现类,不同的数据库不一样 
 	Class.forName("com.mysql.cj.jdbc.Driver");//6及以上不支持com.mysql.jdbc.Driver
 	//jdbc:mysql:协议 localhost:IP地址  3306:默认端口号  myemployees:其中的一个库 

	//将用户名和密码封装在里边
	String url = "jdbc:mysql://localhost:3306girls?	useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8";
	////girls为你所要为哪个库编写该配置文件和进行后续操作,根据自己需要进行修改!?号代表添加一	些设置,
	//防止出现一些让人恶心的问题,比如乱码,每增加一个条件用&号连接

	Properties info = new Properties();
	info.setProperty("user", "root"); 
	info.setProperty("password", "*******"); //你自己数据库登录时输入的密码
	Connection coon =  DriverManager.getConnection(url, info);
 	}
 }

下边的就直接写方法!!
方式二:

@Test
public void testConnection2() throws Exception {
	// 获取driver实现类对象,使用反射
	Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
	clazz.getDeclaredConstructor().newInstance();//java9的写法,9以下可使用getConstructor()
	String url = "jdbc:mysql://localhost:3306/girls?useUnicode=true&characterEncoding=UTF-				8&userSSL=false&serverTimezone=GMT%2B8";//同方式一
	Properties info = new Properties();
	info.setProperty("user", "root");
	info.setProperty("password", "******");
	Connection coon = DriverManager.getConnection(url, info);
	/*
	或者直接写
	String username="root";
	String passwprd="******";
	coon= DriverManager.getConnection(url,info);
	*/
}

方式三:

@Test
public void testConnection3() throws Exception {	
	// 1.获取driver实现类对象
	Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
	Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();
	// 2.提供另外三个连接的基本信息
	String url = "jdbc:mysql://localhost:3306/girls?serverTimezone=GMT%2B8";
	String user = "root";
	String password = "******";
	// 3.注册驱动
	DriverManager.registerDriver(driver);
	// 4.获取连接
	Connection coon = DriverManager.getConnection(url, user, password);
}

方式四:

@Test
public void testConnection4() throws Exception {
	//1.提供另外三个连接的基本信息
	String url = "jdbc:mysql://localhost:3306/girls?serverTimezone=GMT%2B8";
	String user = "root";
	String password = "******";
	// 2.获取driver实现类对象并注册驱动
	// Class.forName这一句也可以省略,因为也帮我们做了,显示我们驱动的路径
	// 但是不建议注释掉,因为mysql可以,但Oracle等就不一定了,养成习惯
	
	Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
	// 没有下边注释的这两行也可以运行成功,mysql自己帮我们做了,相当于加载驱动(
	//静态代码块执行,在类加载执行时即可调用
	Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();
	DriverManager.registerDriver(driver);
	// 3.获取连接
	Connection coon = DriverManager.getConnection(url, user, password);
}

方式五:!!!!!!
将一些连接需要的配置信息声明在配置文件中,不再使用硬编码的方式写到代码里边,因为那样又麻烦而且写得基本都是同一个内容。写到配置文件中后,通过读取配置文件的方式,获取连接。

//配置文件一般命名为jdbc.properties,直接放在src目录下
String url = "jdbc:mysql://localhost:3306/girls?serverTimezone=GMT%2B8&characterEncoding=utf-8&rewriteBatchedStatements=true
//Again !!!
//girls为你所要为哪个库编写该配置文件和进行后续操作,根据自己需要进行修改!?号代表添加一些设置,
//防止出现一些让人恶心的问题,比如乱码,每增加一个条件用&号连接
String user= "root"
String password = "******" //你自己登录数据库的密码
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver")

然后进行测试(Junit测试)

//添加注解,导入包
@Test
public void testConnection5() throws Exception {
	// 1.获取类的加载器,读取配置文件中的基本信息,生成一个对应的流
	// 类的加载器有很多种,本方法用的是系统的,因为是自己定义的类

	InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
	Properties pros = new Properties();
	pros.load(is);
	String user = pros.getProperty("user");
	String password = pros.getProperty("password");
	String url = pros.getProperty("url");
	String driverClass = pros.getProperty("driverClass");
	// 2.加载驱动
	Class.forName(driverClass);
	// 3.获取连接
	Connection connection = DriverManager.getConnection(url, user, password);
}

方式五的好处:
1.实现了数据和代码的分离,实现了解耦,而且当数据库改变时,只需要改配置文件信息即可
2.编译后打jar包放到Tomcat等服务器上。如果要修改配置文件信息, 可以避免程序重新打包,只需要替换文件即可
之后的使用效果就像这样

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class JDBCUtils {
	public static Connection getConnection() throws Exception {
		Connection connection = null;
		PreparedStatement ps = null;
		// InputStream is =
		// ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");

		Properties pros = new Properties();
		pros.load(new FileInputStream("src//jdbc.properties"));
		String user = pros.getProperty("user");
		String password = pros.getProperty("password");
		String url = pros.getProperty("url");
		String driverClass = pros.getProperty("driverClass");

		// 2.加载驱动
		Class.forName(driverClass);

		connection = DriverManager.getConnection(url, user, password);
		return connection;
	}
	public static void closeResource(Connection connection, PreparedStatement ps) {
		try {
			if (ps != null)
				ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if (connection != null)
				connection.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public static void closeResource(Connection connection, PreparedStatement ps, ResultSet re) {
		try {
			if (ps != null)
				ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if (connection != null)
				connection.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if (re != null) {
				re.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

你可能感兴趣的:(JDBC)