学习所得来源于b站千峰java学院Gavin老师JDBC教学视频

1、引言

  • 以前我们操作数据库都是使用客服端工具访问数据库,需要手工建立连接,输入用户名和密码登录,编写sql语句,点击执行,查看操作结果(结果集或受影响行数)

image.png

思考:在实际开发中,会采用客服端操作数据库吗

  • 在实际开发中,当用户的数据发生改变时,不可能通过客户端执行操作SQL语句,因为操作量过大,无法保证效率和正确性

2、JDBC

2.1 什么是JDBC

  • JDBC(Java DataBase Connectivity Java)java连接数据库,可以使用java语言连接数据库完成CRUD操作

2.2 JDBC核心思想

  • 其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。 我们可以使用这套接口(JDBC)编程,真正执行的代 码是驱动jar包中的实现类

image.png

2.3 MYSQL数据库驱动

  • mysql-connector-java-5.1xx-bin.jar 适用于5.x版本
  • mysql-connector-java-8.1xx-bin.jar 适用于8.x版本

2.3.1环境搭建

image.png

  • Connector/J 就是为JavaJDBC准备的

image.png
image.png

  • .当点击下载上的时候MySQL官网会提醒你注册MySQL账号,不过不用注册一样下载点击No thanks,just start my download

image.png

  • 下载完毕后,解压后,会看见如下图的就是mysql驱动的 jar 包:
    image.png

  • 接下在的部分在ieda中配置

    • 打开idea,新建java工程,然后新建一个Directory文件夹(改名为lib),用于存放jar文件

      1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12410138/1633226846559-74fb41b7-ec3e-431d-81e1-141ad33e02f6.png#clientId=uadee3b02-d2be-4&from=paste&height=389&id=JTqsl&margin=%5Bobject%20Object%5D&name=image.png&originHeight=657&originWidth=858&originalType=binary&ratio=1&size=63098&status=done&style=none&taskId=u704e4b05-2e2b-4659-b705-969196fb664&width=507.9715881347656)<br /> ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12410138/1633226881325-046a24bf-47d9-416f-bda6-0e2fc7c5e816.png#clientId=uadee3b02-d2be-4&from=paste&height=247&id=c5Vfu&margin=%5Bobject%20Object%5D&name=image.png&originHeight=592&originWidth=1222&originalType=binary&ratio=1&size=35409&status=done&style=none&taskId=u135d7644-7a0d-4b88-bc6f-bba465ec6dc&width=508.97442626953125)<br /> ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12410138/1633227279524-c46c59d6-cb9d-4a0d-b265-659d98b1f93a.png#clientId=uadee3b02-d2be-4&from=paste&height=229&id=Tq8v1&margin=%5Bobject%20Object%5D&name=image.png&originHeight=225&originWidth=501&originalType=binary&ratio=1&size=9856&status=done&style=none&taskId=ue933edeb-7bd9-42e4-9092-a3488184093&width=509.4886169433594)<br />
    • 将mysql驱动文件mysql-connector-java-8.1xx-bin.jar 复制到项目lib文件夹中

      image.png
      image.png
      image.png

    • 选中lib文件夹右键Add as Libraay,这里我选中的是Project Libraay,点击ok

      1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12410138/1633228102108-827fbe93-424f-4da8-a408-37aff6ccf94a.png#clientId=u86bea956-b9ce-4&from=paste&height=658&id=ud58cbd10&margin=%5Bobject%20Object%5D&name=image.png&originHeight=689&originWidth=496&originalType=binary&ratio=1&size=34432&status=done&style=none&taskId=uc2c349c1-ef8b-45aa-a809-39094a91854&width=473.991455078125)<br /> ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12410138/1633228240921-ef568a20-f4bc-4ea0-b492-c16f162edd61.png#clientId=u86bea956-b9ce-4&from=paste&height=301&id=ub5e3a2c0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=411&originWidth=652&originalType=binary&ratio=1&size=19496&status=done&style=none&taskId=u14f0071a-b31f-4684-9b2a-c3900505723&width=477.9942932128906)
    • 这时候就发现mysql-connector-java-8.0.26.jar包可以打开了,证明了数据库的驱动jar文件跟我们项目产生了关联

      1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12410138/1633229415101-061779ad-6594-4d1d-9dda-7305b87a920e.png#clientId=u86bea956-b9ce-4&from=paste&height=261&id=ub8adf5d9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=305&originWidth=567&originalType=binary&ratio=1&size=16437&status=done&style=none&taskId=u91a48927-c8e9-417b-999f-6a5e4f0df90&width=485.4942932128906)

3、JDBC开发步骤【重点】

3.1 注册驱动

  1. 使用 Class.forName("com.mysql.jdbc.Driver");// 加载驱动 手动加载字节码文件到JVM中
  • 此路径com.mysql.jdbc.Driver可在idea中查看

    1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12410138/1633229826657-0bcf737a-dda3-4b8f-a0f0-bb00163ef30c.png#clientId=u86bea956-b9ce-4&from=paste&height=307&id=MqHpQ&margin=%5Bobject%20Object%5D&name=image.png&originHeight=389&originWidth=633&originalType=binary&ratio=1&size=19707&status=done&style=none&taskId=u19d358b0-a2d7-4f17-9a13-9ee0e7c1508&width=499.491455078125)

3.2 连接数据库

  1. //获取连接对象
  2. // DriverManager.getConnection(url,user,password);
  3. Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/t_table", "root", "123456");

url:一般是都协议、IP、端口、SID组成

3.3 获取执行sql语句的对象

  1. //通过Connection对象获得Statement对象,用于对数据库进行通用访问
  2. Statement statement = connection.createStatement();

3.4 执行sql语句并接收结果

  1. int result = statement.executeUpdate("DELETE FROM grade WHERE gradename = \"赵路\"");// 执行sql语句并接收结果

温馨提示:

  • 在编写DML语句时,一定要注意字符串参数的符号是单引号**'值'**
  • DML语句:增删改时,返回受影响行数(int 类型)
  • DQL语句:查询时,返回结果数据(ResultSet 结果集)

3.5 处理结果

  1. if(result == 1){
  2. System.out.println("删除成功");
  3. }else {
  4. System.out.println("删除失败");
  5. }

3.6 释放资源

  1. // 先开后关原则,释放所使用到的资源对象
  2. statement.close();
  3. connection.close();

题目

1、实现向数据库表中插入一条数据

  1. public class TestJDBC {
  2. public static void main(String[] args) throws Exception {
  3. //1、注册驱动 加载驱动
  4. Class.forName("com.mysql.jdbc.Driver");
  5. // 2、获得连接
  6. String url ="jdbc:mysql://localhost:3306/t_table";
  7. String user = "root";
  8. String password = "123456";
  9. Connection connection = DriverManager.getConnection(url,user,password);
  10. if(connection != null){
  11. System.out.println("连接到数据库");
  12. }else {
  13. System.out.println("连接失败");
  14. }
  15. // 3、获得执行sql语句的对象
  16. Statement statement = connection.createStatement();
  17. // 4、编写sql语句,执行sql语句
  18. String sql = "insert into `grade` VALUES (28,'肖战')";
  19. int result = statement.executeUpdate(sql);//DML操作调用方法
  20. // 5、处理接受结果
  21. if(result == 1){
  22. System.out.println("成功");
  23. }else {
  24. System.out.println("失败");
  25. }
  26. //6、释放资源,先开后关
  27. statement.close();
  28. connection.close();
  29. }
  30. }

2、实现向数据库表中删除一条数据

  1. public class DeleteJDBC {
  2. public static void main(String[] args) throws Exception{
  3. // 1、加载驱动
  4. Class.forName("com.mysql.jdbc.Driver");
  5. // 2、获得连接对象
  6. Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/t_table", "root", "123456");
  7. //3、获得执行sql的对象
  8. Statement statement = connection.createStatement();
  9. //4、执行sql语句,并接收结果
  10. int result = statement.executeUpdate("DELETE FROM grade WHERE gradename = \"赵路\"");
  11. // 5、处理结果
  12. if(result == 1){
  13. System.out.println("删除成功");
  14. }else {
  15. System.out.println("删除失败");
  16. }
  17. // 6、释放资源
  18. statement.close();
  19. connection.close();
  20. }
  21. }

4、ResultSet(结果集)

  • 在执行查询sql后,存放查询到的数据

4.1 接收结果集

  1. ResultSet rs = statement.executeQuery(sql);
  2. ResultSet rs = statement.executeQuery("select *from grade");