前言:JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。
一、连接MySQL的前置工作
需要在中央仓库内下载驱动包,后在项目中导入,具体操作如下:
在下列版本中找到与当前电脑的数据库版本相同的jar包即可:
进入具体版本后如下:
下载完之后,需要在项目中导入这个jar包,需要先创建一个目录,需要与src同级
标记成为存放库文件(.jar包)的目录,这样IDEA就能识别目录中的jar包
完成以上操作,数据库所需要的驱动包就完成了,下面我们进行JDBC的使用
二、JDBC的使用
前言:需要先在数据库中创建库,表等:
2.1 插入数据
1.创建数据库源对象,其作用是描述了要访问的数据库是啥,在哪:
DataSource dataSource = new MysqlDataSource();
分析:
DataSource 是一个接口,而MysqlDataSource是我们往项目中导入的那个jar包,如果导入操作失败,则这个类找不到:
告知数据库位置及其密码:
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("00000");
分析:
- URL为唯一资源定位符
- 这里运用到了向下转型,因为DataSource是服务于各种数据库的,而MysqlDataSource只服务于MySQL
- 127.0.0.1是一个特殊IP(环回IP),表示本机IP
- 安装数据库时候,端口号默认为3306
- JDBC为你现在要访问的数据库名称
2.让数据库和代码建立联系
调用DataSource类的getConnection方法,后用Connection类的引用接收,需要导入正确的包: import java.sql.Connection;
Connection connection = dataSource.getConnection();
完成之后,因为其是受查异常,需要处理(throws或try-catch)。
注:这里不使用DriverManager的原因是,DriverManager每次getConnection都需要重新建立连接,而DataSource则是可以内置 连接池,连续复用,大大提高了效率。
3.构造要执行的sql语句
System.out.println("请输入要插入的学号");
int id = scanner.nextInt();
System.out.println("请输入要插入的学生姓名");
String name = scanner.next();
String sql = "Insert into student values(?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1,id);
statement.setString(2,name);
System.out.println("statement: "+statement);
分析:?为占位符,顾名思义,先占个位置,后面会被替换成其他值,PreparedStatement 表示一个预处理过的SQL语句对象
4.执行语句并回收资源
//执行方法有两个,一个executeUpdate 对应插入删除修改语句
// executeQuery对应查询语句
int n = statement.executeUpdate();
System.out.println("这次操作影响了"+n+"行数据");
//完成之后,需要释放相关资源(关闭资源的顺序与创建的资源顺序相反)
statement.close();
connection.close();
分析:statement.executeUpdate()的返回值表示影响了几行数据相当于数据库中的:
完整代码:
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:
* User: 86136
* Date: 2022-08-28
* Time: 14:43
*/
public class Test {
public static void main(String[] args) throws SQLException {
//DataSource 是一个接口,而MysqlDataSource是我们往项目中导入的那个jar包
//1.创建数据源
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("030106");
//2.让数据库和代码建立联系
Connection connection = dataSource.getConnection();
//3.构造要执行的sql语句
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要插入的学号");
int id = scanner.nextInt();
System.out.println("请输入要插入的学生姓名");
String name = scanner.next();
String sql = "Insert into student values(?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1,id);
statement.setString(2,name);
System.out.println("statement: "+statement);
//4.执行sql
//执行方法有两个,一个executeUpdate 对应插入删除修改语句 ,
// executeQuery对应查询语句
int n = statement.executeUpdate();
System.out.println("这次操作影响了"+n+"行数据");
//5.完成之后,需要释放相关资源(关闭资源的顺序与创建的资源顺序相反)
statement.close();
connection.close();
}
}
2.2 删除数据
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:
* User: 86136
* Date: 2022-08-28
* Time: 16:54
*/
public class DeleteData {
public static void main(String[] args) throws SQLException {
//1.创建数据源
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setPassword("030106");
((MysqlDataSource)dataSource).setUser("root");
// 2.建立连接
Connection connection = dataSource.getConnection();
// 3.构造语句
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你要删除的数据");
int id = scanner.nextInt();
String sql = "delete from student where id = ? ";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1,id);
//4. 执行语句
int n = statement.executeUpdate();
System.out.println("这次操作影响了"+n+"行数据");
//5.关闭资源
statement.close();
connection.close();
}
}
2.3 查询数据
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* Created with IntelliJ IDEA.
* Description:
* User: 86136
* Date: 2022-08-28
* Time: 17:23
*/
public class select {
public static void main(String[] args) throws SQLException {
// 1.创建数据源
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("030106");
// 2 建立连接
Connection connection = dataSource.getConnection();
// 3.构造SQL
String sql = "select * from student";
PreparedStatement statement = connection.prepareStatement(sql);
// 4.执行sql
//executeQuery 返回的结果是ResultSet,结果集,里面是一个”表“这样的数据结构
ResultSet resultSet = statement.executeQuery();
// 5. 遍历结果集合
while (resultSet.next()){
//每次循环,就能够获取到resultSet中的一行,进一步就可以拿到每一列。
int id = resultSet.getInt("id");//”“里面填写的是列名
String name = resultSet.getString("name");
System.out.println("id = "+id+", name = "+name);
}
// 6,相关资源的释放
resultSet.close();
statement.close();
connection.close();
}
}