其实我也觉得有点长,但是不放在一起没有对比对吧
注:所有内容针对的是同一个库(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();
}
}
}