一、数据库的连接
1. 引入JDBC驱动程序
1.1 如何获取驱动程序
驱动程序由数据库提供商提供下载。
MySQL 的驱动下载地址:http://dev.mysql.com/downloads/
依次点击 Connector/J -> Platform Independent ,如然后下载下面那个
1.2 如何在Java project 项目应用中添加数据库驱动 jar
① 把下载好的mysql-connector-j-8.0.31.jar拷贝到该项目中
ps:这里的lib文件夹是自己创建的(也可不创建)
② 然后点击Add as Library -> OK,把其添加到项目类路径下
这样就表示成功了
2. 连接操作
2.1 方式一:
@Test
public void testConnection1() throws SQLException {
//获取Driver实现类对象
Driver driver = new com.mysql.cj.jdbc.Driver();
//jdbc:mysql协议
//localhost:ip地址
//3306: 默认端口
//student_attendance_system: 数据库名称
String url = "jdbc:mysql://localhost:3306/student_attendance_system";
Properties info = new Properties();
//将用户名和密码封装在Property
info.setProperty("user", "root");
info.setProperty("password", "0915");
Connection conn = driver.connect(url, info);
System.out.println(conn);
}
2.2 方式二:队方式一的迭代(目的:为了使程序不出现第三方的API,使得程序有更好的移植性)
@Test
public void testConnection2() throws Exception {
//1.获取Driver实现类对象
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
//2. 提供数据库连接
String url = "jdbc:mysql://localhost:3306/student_attendance_system";
//3. 提供连接需要的用户名和密码
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "0915");
//4. 获取连接
Connection conn = driver.connect(url, info);
System.out.println(conn);
}
2.3 方式三:使用DriverManager替换Driver
@Test
public void testConnection3() throws Exception {
//1. 获取Driver实现类对象
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
//2. 提供3个类的基本信息
String url = "jdbc:mysql://localhost:3306/student_attendance_system";
String user = "root";
String password = "0915";
//注册驱动
DriverManager.registerDriver(driver);
//获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
2.4 方式4:可以只加载,不用显示的注册驱动(Driver)
@Test
public void testConnection4() throws Exception {
//1. 提供3个类的基本信息
String url = "jdbc:mysql://localhost:3306/student_attendance_system";
String user = "root";
String password = "0915";
//2. 加载Driver
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver"); //也可以省略,因为META-INF/service的java.sql.Driver已经做过了
//相较于方式三,可以省略如下操作:
// Driver driver = (Driver) clazz.newInstance();
//注册驱动
// DriverManager.registerDriver(driver);
//获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
2.5 方式五:将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接
这里要在src文件夹下建立一个文件(jdbc.properties),可以其他名字,然后在该文件下输入数据库连接需要的属性
ps:一般连数据库用这种方式
文件内容:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
user=root
password=0915
连接代码:
@Test
public void testConnection5() throws Exception {
// 1. 读取配置文件的4个信息
InputStream is = SqlConnectionTest.class.getClassLoader().getResourceAsStream("src/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 driver = pros.getProperty("driver");
//2. 加载驱动
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
3. 拓展
一般在项目中,数据库连接用一个工具类来会更好,这样只要在用的时候,直接调用就好了。
工具类:
package src.Util;
import src.SqlConnectionTest.SqlConnectionTest;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
/**
* @author XiaoQ
* @create 2022-12-11 19:26
*/
public class JDBCUtils {
/**
* @Description 获取数据库的连接
* @return Connection
* @author XiaoQ
* @date 2022/12/11 20:22
*/
public static Connection getConnection() throws Exception {
// 1. 读取配置文件的4个消息
InputStream is = SqlConnectionTest.class.getClassLoader().getResourceAsStream("src/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 driver = pros.getProperty("driver");
//2. 加载驱动
Class.forName(driver);
//3. 获取连接
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
/**
* @Description 关闭连接和Statement
* @return
* @author XiaoQ
* @date 2022/12/11 20:25
*/
static public void closeResource(Connection conn, Statement ps){
try {
if(ps != null)
ps.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
try {
if(conn != null)
conn.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* @Description 关闭连接、Statement、ResultSet
* @return
* @author XiaoQ
* @date 2022/12/12 1:51
*/
static public void closeResource(Connection conn, Statement ps, ResultSet res){
try {
if(ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(res != null)
res.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}