编程语言: 如Java,C、C++、Python等
数据库(数据库服务器): 如Oracle,MySQL,SQL Server等
数据库驱动包: 不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提
供了 Java 的驱动包 mysql-connector-java,需要基于 Java 操作 MySQL 即需要该驱动包;同样的,
要基于 Java 操作 Oracle 数据库则需要 Oracle 的数据库驱动包ojdbc
JDBC,即Java Database Connectivity,java数据库连接
是一种用于执行SQL语句的 Java API,它是 Java 中的数据库连接规范;这个API由 java.sql.* ,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问
Java 自身来完成 JDBC API 和 数据库 API 之间的转换
MySQL 是一个 CS 结构的系统
编程操作数据库本质上:其实就是自己用代码实现了一个MySQL客户端,这个客户端同样是通过网络来和服务器进行交互
数据库不是凭空就能实现的,而是数据库会给我们提供一组 API 来方便咱们实现
数据库的种类有很多,不同数据库提供的 API 不太一样
例: MySQL 的 API,Oracle 的 API,SQL Server 的 API 都差异很大
在 Java 中,这样的驱动程序是一个独立的 “jar包”
jar包: .class —— 打一个压缩包 .jar (类似于 .rar / .zip )
在 Maven仓库 上可以看到,MySQL JDBC Driver 是非常多的,下载的 jar包 必须要和 MySQL 服务器版本一致
要想使用 jar包,需要将 jar包 导入到 IDEA 中,让代码能够访问到 jar包 中的类
剩下的一路 OK 即可~
JDBC 编程中主要用到的类 / 对象:
1.DataSource — 用于配置如何连接 MySQL
2.Connection — 表示建立好的一次连接(操作数据库之前需要先建立连接)
3.PrepareStatement — 对应一个 SQL 语句
4.ResultSet — 表示 select 查找结果的结果集
要想操作数据库,第一步需要和数据库建立连接
Connection 接口实现类由数据库提供,获取Connection对象通常有两种方式
以第二种方式为例:
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
如上述这个 import 能够正确执行,说明 jar包 导入成功
// 创建对象 (DataSource对象的是生命周期是跟随整个程序的)
DataSource dataSource = new MysqlDataSource();
// 接下来需要针对 DataSource 进行一些配置,以便后边能够正确的访问到 数据库服务器
// 主要配置 3 方面信息: URL,User,Password (需要进行向下转型)
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/Date20211028?characterEncoding=utf-8&userSSL=true");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("自己设置的密码");
import java.sql.Connection;
import java.sql.SQLException;
// 2.和数据库建立连接 建立连接好了之后,就可以进行后续的操作
// 建立连接的意义 是为了验证当前网络通信是否正常
// 如果不正常会抛出 SQLException的异常
// connection 对象的生命周期是较短的,可以每个请求创建一个新的connection对象
Connection connection = dataSource.getConnection();
3.PrepareStatement 对象拼装具体的 SQL 语句
(相当于客户端中输入SQL的过程)
import java.sql.PreparedStatement;
// 3.拼装 SQL 语句
// 需要用到 PrepareStatement 对象
// 先以 插入数据为例
int id = 1;
String name = "花花";
int classID = 2;
// ? 表示一个占位符,可以把具体的变量替换到 ? 的位置
String sql = "insert into student values(?,?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
// 此处的 1 2 3 表示第几个问号 (相当于 ? 的下标)
statement.setInt(1,id);
statement.setString(2,name);
statement.setInt(3,classID);
4.拼装好之后,需要执行 SQL
(客户端中敲下回车,此时SQL就被发到服务器了)
// 4.拼装好之后,需要执行 SQL
// insert delete update 都使用 executeUpdate 方法来执行
// select 就是 executeQuery 来执行
// 返回值表示此次操作修改了多少行
int ret = statement.executeUpdate();
5.执行完毕后,关闭释放相关资源
(退出客户端)
// 5.执行完毕后,关闭释放相关资源
// 后创建的被先释放,顺序不能错
statement.close();
connection.close();
补充:
附全部代码:
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TestJDBC {
public static void main(String[] args) throws SQLException {
// 1.创建 DataSource 对象 (DataSource对象的是生命周期是跟随整个程序的)
DataSource dataSource = new MysqlDataSource();
// 接下来需要针对 DataSource 进行一些配置,以便后边能够正确的访问到 数据库服务器
// 主要配置 3 方面信息: URL,User,Password (需要进行向下转型)
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/Date20211028?characterEncoding=utf-8&useSSL=true");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("自己设置的密码"); //密码得输入正确才可执行
// 2.和数据库建立连接 建立连接好了之后,就可以进行后续的操作
// 建立连接的意义 是为了验证当前网络通信是否正常
// 如果不正常会抛出 SQLException的异常
// connection 对象的生命周期是较短的,可以每个请求创建一个新的connection对象
Connection connection = dataSource.getConnection();
// 3.拼装 SQL 语句
// 需要用到 PrepareStatement 对象
// 先以 插入数据为例
int id = 1;
String name = "花花";
int classID = 2;
// ? 表示一个占位符,可以把具体的变量替换到 ? 的位置
String sql = "insert into student values(?,?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
// 此处的 1 2 3 表示第几个问号 (相当于 ? 的下标)
statement.setInt(1,id);
statement.setString(2,name);
statement.setInt(3,classID);
System.out.println("statement: " + statement);
// 4.拼装好之后,需要执行 SQL
// insert delete update 都使用 executeUpdate 方法来执行
// select 就是 executeQuery 来执行
// 返回值表示此次操作修改了多少行
int ret = statement.executeUpdate();
System.out.println("ret: " + ret);
// 5.执行完毕后,关闭释放相关资源
// 后创建的被先释放,顺序不能错
statement.close();
connection.close();
}
}
输出结果:
查看数据库中的结果:
select 操作示例:
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;
public class TestJDBCSelect {
public static void main(String[] args) throws SQLException {
// 1.创建 DataSource 对象
DataSource dataSource = new MysqlDataSource();
// 配置三方面信息
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/Date20211028?characterEncoding=utf-8&useSSL=true");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("Xzzcode666");
// 2.创建 connection 对象,和数据库建立连接
Connection connection = dataSource.getConnection();
// 3.拼装 SQL 语句
String sql = "select * from student";
PreparedStatement statement = connection.prepareStatement(sql);
// 4.执行 SQL
ResultSet resultSet = statement.executeQuery();
// 5.遍历结果集 遍历过程和迭代器遍历集合类有点像
// 结果集相当于一张表,这个表里有很多行,每一行是一个记录(又包含很多列)
// next: 一方面判定当前是否存在下一行; 另一方面如果存在下一行,就获取到这一行
while(resultSet.next()){
// resultSet 的"光标"指向当前行,就可以把当前行中的的列的数据都获取到
// 当前表中的每一行包含三列: id, name, classID
// 可以根据列名获取对应的列数据
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int classID = resultSet.getInt("classID");
// 上述三个 参数中的列名必须和 数据库中的列名完全一致
System.out.println("id: " + id + " name: " + name + " classId: " + classID);
}
// 6.执行完毕后,关闭释放相关资源
resultSet.close();
statement.close();
connection.close();
}
}
输出结果:
删除操作实例:
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;
public class TestJDBCDelete {
public static void main(String[] args) throws SQLException {
Scanner scan = new Scanner(System.in);
System.out.println("请输入要删除的学生姓名: ");
String name = scan.next();
//1.创建 DataSource 对象
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/Date20211028?characterEncoding=utf-8&useSSL=true");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("Xzzcode666");
// 2.创建Connection 对象,和数据库建立连接
Connection connection = dataSource.getConnection();
// 3.拼装SQL
String sql = "delete from student where name = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1,name);
// 4.执行 SQL
int ret = statement.executeUpdate();
if(ret == 1){
System.out.println("删除成功!");
}
else{
System.out.println("删除失败!");
}
// 5.关闭并释放资源
statement.close();
connection.close();
}
}
输出结果:
数据库中检验:
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;
public class TestJDBCUpdate {
public static void main(String[] args) throws SQLException {
Scanner scan = new Scanner(System.in);
System.out.println("请输入要修改的学生id: ");
int id = scan.nextInt();
System.out.println("请输入要修改的学生姓名: ");
String name = scan.next();
//1.创建 DataSource 对象
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/Date20211028?characterEncoding=utf-8&useSSL=true");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("Xzzcode666");
// 2.创建Connection 对象,和数据库建立连接
Connection connection = dataSource.getConnection();
// 3.拼装SQL
String sql = "update student set name = ? where id = ?";
PreparedStatement statement = connection.prepareStat1ement(sql);
statement.setString(1,name);
statement.setInt(2,id);
// 4.执行 SQL
int ret = statement.executeUpdate();
if(ret == 1){
System.out.println("修改成功!");
}
else{
System.out.println("修改失败!");
}
// 5.关闭并释放资源
statement.close();
connection.close();
}
}
输出结果:
数据库校验:
总结:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/m0_47988201/article/details/121014489
内容来源于网络,如有侵权,请联系作者删除!