JAVA DataBase Connectivity Java数据库连接技术。
image-20211119101512147.png

1. JDBC的本质

jdbc是官方(sun公司)定义的一套操作所有关系型数据库的规则(接口),各个数据库厂商提供数据库驱动jar包。
总结:

在java中访问数据库只能通过JDBC。 JDBC是java访问数据库的基础,其他数据库访问技术(MyBatis)都是对JDBC的封装 JDBC是为了访问不同的数据库,提供了一种统一的访问方式。 JDBC本身是java连接数据库的一个标准,是进行数据库连接的抽象层.由java编写的一组类和接口,接口的实现由各大数据库厂商来实现

2. JDBC实现步骤

1、加载驱动 2、连接数据库 3、创建statement对象 4、发送sql 5、处理结果集 6、关闭连接

3. 准备

3.1 数据库准备

1、准备数据库

  1. -- 创建数据库,设置编码格式为utf8
  2. CREATE DATABASE test_jdbc character SET utf8;

2、准备表,数据

  1. -- 使用test_jdbc数据库
  2. use test_jdbc;
  3. -- 创建表
  4. CREATE TABLE t_user (
  5. id int(11) NOT NULL AUTO_INCREMENT,
  6. username varchar(25) DEFAULT NULL,
  7. password varchar(25) DEFAULT NULL,
  8. age int(11) DEFAULT NULL,
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  11. -- 准备数据
  12. insert into t_user(id,username,password,age(1,'一一','yiyi',11);
  13. insert into t_user(id,username,password,age(2,'二二','erer',22);
  14. insert into t_user(id,username,password,age(3,'三三','sansan',33);

3、准备MySQL的驱动jar包

链接:https://pan.baidu.com/s/1770JZCpQqWDv5oCxBlSIIQ 提取码:2fom

4、准备junit包

链接:https://pan.baidu.com/s/1sZ4fD7ynjI5l1MOZIRfGCQ 提取码:1b3s

3.2 idea项目准备

1、创建项目一个java项目
image.png
image.png
image.png
image.png
2、在项目下新建一个lib文件夹,用来专门存放jar包
image.png
3、把jar复制到lib文件下,引用jar包
3.1、方式一
image.png
image.png
image.png
image.png
3.2方式二
image.png
4成功效果,有箭头
image.png

  1. 在src下见test(随意)包,包下建JdbcTest类(名字随便取,不能是Test) ```java package test;

public class JdbcTest { }

  1. <a name="rGX2H"></a>
  2. ## 4. 查询
  3. 按实现步骤来
  4. ```java
  5. package test;
  6. import org.junit.Test;
  7. import java.sql.*;
  8. public class JdbcTest {
  9. /**
  10. * jdbc查询操作
  11. */
  12. @Test
  13. public void insertTest() throws ClassNotFoundException, SQLException {
  14. // 1、加载驱动,异常抛出,固定格式,和MySQL的驱动jar版本匹配
  15. Class.forName("com.mysql.jdbc.Driver");
  16. // 2、连接数据库,固定格式,连接本地3306端口的MySQL的test_jdbc数据库,设置编码和时区
  17. String url = "jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
  18. // MySQL用户名
  19. String user = "root";
  20. // MySQL密码
  21. String password = "root";
  22. // 调方法,连接数据库
  23. Connection conn = DriverManager.getConnection(url, user, password);
  24. // 3、创建statement对象,这个对象是可以发送sql语句
  25. Statement statm = conn.createStatement();
  26. //4、发送sql,调用executeQuery()方法
  27. String sql = "select * from t_user";
  28. // 返回的是一个ResultSet 集合
  29. ResultSet rs = statm.executeQuery(sql);
  30. //5、处理结果集
  31. //指针一个一个的去找,如果找到就取出
  32. while (rs.next()) {
  33. // 1、按字段名来取,比较真观,推荐使用(常用),
  34. // int类型调用getInt()方法
  35. int id = rs.getInt("id");
  36. String username = rs.getString("username");
  37. String passworld1 = rs.getString("password");
  38. int age = rs.getInt("age");
  39. /*
  40. int id = rs.getInt(1);//表示第一列id字段
  41. String username = rs.getString(2);//表示第二列username字段
  42. String passworld2 = rs.getString("passworld");
  43. int age = rs.getInt("age");
  44. */
  45. System.out.println(id + "-" + username + "-" + password1 + "-" + age);
  46. }
  47. // 6、关闭连接 后打开的先关闭
  48. rs.close();
  49. statm.close();
  50. conn.close();
  51. }

5. 添加

  1. /**
  2. * jdbc实现添加操作
  3. */
  4. @Test
  5. public void TestAddUser() throws Exception {
  6. // 1、加载驱动,异常抛出,固定格式,和MySQL的驱动jar版本匹配
  7. Class.forName("com.mysql.jdbc.Driver");
  8. // 2、连接数据库,固定格式,连接本地3306端口的MySQL的test_jdbc数据库,设置编码和时区
  9. String url = "jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
  10. // MySQL用户名
  11. String user = "root";
  12. // MySQL密码
  13. String password = "root";
  14. // 调方法,连接数据库
  15. Connection conn = DriverManager.getConnection(url, user, password);
  16. //3、创建statement对象
  17. Statement stmt = conn.createStatement();
  18. //4、发送sql 添加,修改,删除 都用executeUpdate()方法
  19. String sql = "INSERT INTO t_user(id,username,password,age) VALUES (null, 'rose', '123', 97)";
  20. int i = stmt.executeUpdate(sql);
  21. //表示的影响的行数
  22. System.out.println(i);
  23. //5、关闭连接
  24. stmt.close();
  25. conn.close();
  26. }

6. 删除

  1. /**
  2. * jdbc实现删除操作
  3. */
  4. @Test
  5. public void TestDeleteUser() throws Exception {
  6. // 1、加载驱动,异常抛出,固定格式,和MySQL的驱动jar版本匹配
  7. Class.forName("com.mysql.jdbc.Driver");
  8. // 2、连接数据库,固定格式,连接本地3306端口的MySQL的test_jdbc数据库,设置编码和时区
  9. String url = "jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
  10. // MySQL用户名
  11. String user = "root";
  12. // MySQL密码
  13. String password = "root";
  14. // 调方法,连接数据库
  15. Connection conn = DriverManager.getConnection(url, user, password);
  16. // 3、创建statement对象
  17. Statement stmt = conn.createStatement();
  18. // 4、发送sql
  19. String sql="delete from t_user";
  20. int i = stmt.executeUpdate(sql);
  21. System.out.println(i);
  22. // 5、关闭连接
  23. stmt.close();
  24. conn.close();
  25. }

7. 修改

  1. /**
  2. * jdbc实现修改操作
  3. */
  4. @Test
  5. public void TestUpdateUser() throws Exception {
  6. // 1、加载驱动,异常抛出,固定格式,和MySQL的驱动jar版本匹配
  7. Class.forName("com.mysql.jdbc.Driver");
  8. // 2、连接数据库,固定格式,连接本地3306端口的MySQL的test_jdbc数据库,设置编码和时区
  9. String url = "jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
  10. // MySQL用户名
  11. String user = "root";
  12. // MySQL密码
  13. String password = "root";
  14. // 调方法,连接数据库
  15. Connection conn = DriverManager.getConnection(url, user, password);
  16. // 3、创建statement对象
  17. Statement stmt = conn.createStatement();
  18. // 4、发送sql
  19. String sql="update t_user set username ='张三' where id = 3 ";
  20. int i = stmt.executeUpdate(sql);
  21. System.out.println(i);
  22. // 5、关闭连接
  23. stmt.close();
  24. conn.close();
  25. }

8. 异常的处理,以添加为例

  1. @Test
  2. public void TestSelect(){
  3. // 1、加载驱动
  4. try {
  5. Class.forName("com.mysql.jdbc.Driver");
  6. } catch (ClassNotFoundException e) {
  7. e.printStackTrace();
  8. }
  9. // 2、连接数据库
  10. String url = "jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
  11. String user = "root";
  12. String password = "root";
  13. Connection conn = null;
  14. Statement statm = null;
  15. ResultSet rs = null;
  16. try {
  17. conn = DriverManager.getConnection(url, user, password);
  18. statm = conn.createStatement();
  19. //4、发送sql
  20. String sql="select * from t_user";
  21. rs = statm.executeQuery(sql);
  22. //5、处理结果集
  23. while (rs.next()){
  24. int id = rs.getInt(1);
  25. String username = rs.getString(2);
  26. String passworld2 = rs.getString("password");
  27. int age = rs.getInt("age");
  28. System.out.println(id+"-"+username+"-"+passworld2+"-"+age);
  29. }
  30. } catch (SQLException e) {
  31. e.printStackTrace();
  32. }finally {
  33. // 6、关闭连接 后打开的先关闭
  34. try {
  35. if(rs != null){
  36. rs.close();
  37. //关闭连接,给赋值null,gc垃圾回收回机制会优先处理这些对象
  38. rs =null;
  39. }
  40. } catch (SQLException e) {
  41. e.printStackTrace();
  42. }
  43. try {
  44. if(statm != null){
  45. statm.close();
  46. }
  47. } catch (SQLException e) {
  48. e.printStackTrace();
  49. }
  50. try {
  51. if(conn != null){
  52. conn.close();
  53. }
  54. } catch (SQLException e) {
  55. e.printStackTrace();
  56. }
  57. }
  58. }