MySQL<7> JDBC

x33g5p2x  于2021-11-09 转载在 Mysql  
字(7.8k)|赞(0)|评价(0)|浏览(401)

数据库编程的必备条件

编程语言: 如Java,C、C++、Python等
数据库(数据库服务器): 如Oracle,MySQL,SQL Server等
数据库驱动包: 不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提
供了 Java 的驱动包 mysql-connector-java,需要基于 Java 操作 MySQL 即需要该驱动包;同样的,
要基于 Java 操作 Oracle 数据库则需要 Oracle 的数据库驱动包ojdbc

JDBC

什么是 JDBC?

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包,需要将 jar包 导入到 IDEA 中,让代码能够访问到 jar包 中的类

  1. 在 IDEA 的工程中,创建一个目录,把 jar 包拷贝进去

  1. 配置项目的一些属性,让项目能够找到 jar包

剩下的一路 OK 即可~

JDBC 常用接口和类

JDBC 编程中主要用到的类 / 对象:
1.DataSource — 用于配置如何连接 MySQL
2.Connection — 表示建立好的一次连接(操作数据库之前需要先建立连接)
3.PrepareStatement — 对应一个 SQL 语句
4.ResultSet — 表示 select 查找结果的结果集

要想操作数据库,第一步需要和数据库建立连接

Connection 接口实现类由数据库提供,获取Connection对象通常有两种方式

  • DriverManager(驱动管理类)的静态方法获取:
  • DataSource(数据源)对象获取;实际应用中会使用DataSource对象

以第二种方式为例:

  • 1.创建 DataSource 对象
  1. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
  2. 如上述这个 import 能够正确执行,说明 jar 导入成功
  3. // 创建对象 (DataSource对象的是生命周期是跟随整个程序的)
  4. DataSource dataSource = new MysqlDataSource();
  5. // 接下来需要针对 DataSource 进行一些配置,以便后边能够正确的访问到 数据库服务器
  6. // 主要配置 3 方面信息: URL,User,Password (需要进行向下转型)
  7. ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/Date20211028?characterEncoding=utf-8&userSSL=true");
  8. ((MysqlDataSource) dataSource).setUser("root");
  9. ((MysqlDataSource) dataSource).setPassword("自己设置的密码");
  • 2.基于 DataSource 对象,创建 Connection 对象,和数据库建立连接
    (相当于,打开了客户端,输入密码,连接成功)
  1. import java.sql.Connection;
  2. import java.sql.SQLException;
  3. // 2.和数据库建立连接 建立连接好了之后,就可以进行后续的操作
  4. // 建立连接的意义 是为了验证当前网络通信是否正常
  5. // 如果不正常会抛出 SQLException的异常
  6. // connection 对象的生命周期是较短的,可以每个请求创建一个新的connection对象
  7. Connection connection = dataSource.getConnection();

3.PrepareStatement 对象拼装具体的 SQL 语句
(相当于客户端中输入SQL的过程)

  1. import java.sql.PreparedStatement;
  2. // 3.拼装 SQL 语句
  3. // 需要用到 PrepareStatement 对象
  4. // 先以 插入数据为例
  5. int id = 1;
  6. String name = "花花";
  7. int classID = 2;
  8. // ? 表示一个占位符,可以把具体的变量替换到 ? 的位置
  9. String sql = "insert into student values(?,?,?)";
  10. PreparedStatement statement = connection.prepareStatement(sql);
  11. // 此处的 1 2 3 表示第几个问号 (相当于 ? 的下标)
  12. statement.setInt(1,id);
  13. statement.setString(2,name);
  14. statement.setInt(3,classID);

4.拼装好之后,需要执行 SQL
(客户端中敲下回车,此时SQL就被发到服务器了)

  1. // 4.拼装好之后,需要执行 SQL
  2. // insert delete update 都使用 executeUpdate 方法来执行
  3. // select 就是 executeQuery 来执行
  4. // 返回值表示此次操作修改了多少行
  5. int ret = statement.executeUpdate();

5.执行完毕后,关闭释放相关资源
(退出客户端)

  1. // 5.执行完毕后,关闭释放相关资源
  2. // 后创建的被先释放,顺序不能错
  3. statement.close();
  4. connection.close();

补充:

插入数据:

附全部代码:

  1. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
  2. import javax.sql.DataSource;
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.SQLException;
  6. public class TestJDBC {
  7. public static void main(String[] args) throws SQLException {
  8. // 1.创建 DataSource 对象 (DataSource对象的是生命周期是跟随整个程序的)
  9. DataSource dataSource = new MysqlDataSource();
  10. // 接下来需要针对 DataSource 进行一些配置,以便后边能够正确的访问到 数据库服务器
  11. // 主要配置 3 方面信息: URL,User,Password (需要进行向下转型)
  12. ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/Date20211028?characterEncoding=utf-8&useSSL=true");
  13. ((MysqlDataSource) dataSource).setUser("root");
  14. ((MysqlDataSource) dataSource).setPassword("自己设置的密码"); //密码得输入正确才可执行
  15. // 2.和数据库建立连接 建立连接好了之后,就可以进行后续的操作
  16. // 建立连接的意义 是为了验证当前网络通信是否正常
  17. // 如果不正常会抛出 SQLException的异常
  18. // connection 对象的生命周期是较短的,可以每个请求创建一个新的connection对象
  19. Connection connection = dataSource.getConnection();
  20. // 3.拼装 SQL 语句
  21. // 需要用到 PrepareStatement 对象
  22. // 先以 插入数据为例
  23. int id = 1;
  24. String name = "花花";
  25. int classID = 2;
  26. // ? 表示一个占位符,可以把具体的变量替换到 ? 的位置
  27. String sql = "insert into student values(?,?,?)";
  28. PreparedStatement statement = connection.prepareStatement(sql);
  29. // 此处的 1 2 3 表示第几个问号 (相当于 ? 的下标)
  30. statement.setInt(1,id);
  31. statement.setString(2,name);
  32. statement.setInt(3,classID);
  33. System.out.println("statement: " + statement);
  34. // 4.拼装好之后,需要执行 SQL
  35. // insert delete update 都使用 executeUpdate 方法来执行
  36. // select 就是 executeQuery 来执行
  37. // 返回值表示此次操作修改了多少行
  38. int ret = statement.executeUpdate();
  39. System.out.println("ret: " + ret);
  40. // 5.执行完毕后,关闭释放相关资源
  41. // 后创建的被先释放,顺序不能错
  42. statement.close();
  43. connection.close();
  44. }
  45. }

输出结果:

查看数据库中的结果:

查询数据:

select 操作示例:

  1. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
  2. import javax.sql.DataSource;
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. public class TestJDBCSelect {
  8. public static void main(String[] args) throws SQLException {
  9. // 1.创建 DataSource 对象
  10. DataSource dataSource = new MysqlDataSource();
  11. // 配置三方面信息
  12. ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/Date20211028?characterEncoding=utf-8&useSSL=true");
  13. ((MysqlDataSource) dataSource).setUser("root");
  14. ((MysqlDataSource) dataSource).setPassword("Xzzcode666");
  15. // 2.创建 connection 对象,和数据库建立连接
  16. Connection connection = dataSource.getConnection();
  17. // 3.拼装 SQL 语句
  18. String sql = "select * from student";
  19. PreparedStatement statement = connection.prepareStatement(sql);
  20. // 4.执行 SQL
  21. ResultSet resultSet = statement.executeQuery();
  22. // 5.遍历结果集 遍历过程和迭代器遍历集合类有点像
  23. // 结果集相当于一张表,这个表里有很多行,每一行是一个记录(又包含很多列)
  24. // next: 一方面判定当前是否存在下一行; 另一方面如果存在下一行,就获取到这一行
  25. while(resultSet.next()){
  26. // resultSet 的"光标"指向当前行,就可以把当前行中的的列的数据都获取到
  27. // 当前表中的每一行包含三列: id, name, classID
  28. // 可以根据列名获取对应的列数据
  29. int id = resultSet.getInt("id");
  30. String name = resultSet.getString("name");
  31. int classID = resultSet.getInt("classID");
  32. // 上述三个 参数中的列名必须和 数据库中的列名完全一致
  33. System.out.println("id: " + id + " name: " + name + " classId: " + classID);
  34. }
  35. // 6.执行完毕后,关闭释放相关资源
  36. resultSet.close();
  37. statement.close();
  38. connection.close();
  39. }
  40. }

输出结果:

删除数据:

删除操作实例:

  1. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
  2. import javax.sql.DataSource;
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.SQLException;
  6. import java.util.Scanner;
  7. public class TestJDBCDelete {
  8. public static void main(String[] args) throws SQLException {
  9. Scanner scan = new Scanner(System.in);
  10. System.out.println("请输入要删除的学生姓名: ");
  11. String name = scan.next();
  12. //1.创建 DataSource 对象
  13. DataSource dataSource = new MysqlDataSource();
  14. ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/Date20211028?characterEncoding=utf-8&useSSL=true");
  15. ((MysqlDataSource) dataSource).setUser("root");
  16. ((MysqlDataSource) dataSource).setPassword("Xzzcode666");
  17. // 2.创建Connection 对象,和数据库建立连接
  18. Connection connection = dataSource.getConnection();
  19. // 3.拼装SQL
  20. String sql = "delete from student where name = ?";
  21. PreparedStatement statement = connection.prepareStatement(sql);
  22. statement.setString(1,name);
  23. // 4.执行 SQL
  24. int ret = statement.executeUpdate();
  25. if(ret == 1){
  26. System.out.println("删除成功!");
  27. }
  28. else{
  29. System.out.println("删除失败!");
  30. }
  31. // 5.关闭并释放资源
  32. statement.close();
  33. connection.close();
  34. }
  35. }

输出结果:

数据库中检验:

修改数据:

  1. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
  2. import javax.sql.DataSource;
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.SQLException;
  6. import java.util.Scanner;
  7. public class TestJDBCUpdate {
  8. public static void main(String[] args) throws SQLException {
  9. Scanner scan = new Scanner(System.in);
  10. System.out.println("请输入要修改的学生id: ");
  11. int id = scan.nextInt();
  12. System.out.println("请输入要修改的学生姓名: ");
  13. String name = scan.next();
  14. //1.创建 DataSource 对象
  15. DataSource dataSource = new MysqlDataSource();
  16. ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/Date20211028?characterEncoding=utf-8&useSSL=true");
  17. ((MysqlDataSource) dataSource).setUser("root");
  18. ((MysqlDataSource) dataSource).setPassword("Xzzcode666");
  19. // 2.创建Connection 对象,和数据库建立连接
  20. Connection connection = dataSource.getConnection();
  21. // 3.拼装SQL
  22. String sql = "update student set name = ? where id = ?";
  23. PreparedStatement statement = connection.prepareStat1ement(sql);
  24. statement.setString(1,name);
  25. statement.setInt(2,id);
  26. // 4.执行 SQL
  27. int ret = statement.executeUpdate();
  28. if(ret == 1){
  29. System.out.println("修改成功!");
  30. }
  31. else{
  32. System.out.println("修改失败!");
  33. }
  34. // 5.关闭并释放资源
  35. statement.close();
  36. connection.close();
  37. }
  38. }

输出结果:

数据库校验:

总结:

相关文章

最新文章

更多