高效掌握JDBC技术(一),2024年最新这些面试题你会吗

42 阅读7分钟

img img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

以前学习的数据库连接技术:JDBC,好久不使用都有些遗忘了,所以开了一个专栏来分享有关的知识。我会从基础概念到实战一步一步来,循序渐进的高效的记录复习jdbc知识,打下夯实的基础。如有感兴趣的朋友也可以订阅专栏一同学习进步哦。

文章目录

一、JDBC概述

JDBC:Java数据库连接技术

  • 通过Java后台代码连接数据库对数据库内容进行增删改查

1、为什么要学习JDBC?

navicat也可以连接数据库对数据进行增删改查,但是并不能定制化用户数据,所以并不完全使用实战开发

但是JDBC可以通过后台的其他代码完整用户数据的定制化

2、JDBC涉及到的API

  1. Driver:驱动接口 定义了Java如何与数据库建立连接
  2. DriverManager 驱动管理工具类 管理驱动,可以用来获取数据库连接
  3. Connection 连接接口 代表了Java和数据库的联系
  4. PreparedStatement 发送SQL的工具接口 用来像数据库发送一条执行SQL
  5. Resultset 结果集接口 用来接受查询SQL的执行结果

3、JDBC的特点

  • 它是一个规范,不是一个实现
    • JDBC中只有接口,并没有提供实现

二、JDBC的编码步骤

1、navicat操作数据库的步骤

  1. 加载和启动软件
  2. 建立连接
  3. 打开新建查询,准备书写sql
  4. 书写SQL并执行
  5. 查看执行结果
  6. 关闭软件窗口

2、JDBC操作数据库的六大步

  1. 加载驱动
  2. 获取连接
  3. 书写SQL并准备发送SQL的工具
  4. 发送SQL
  5. 处理结果集(只限查询)
  6. 释放相关资源

3、JDBC的步骤实现

  1. 搭建开发环境

    • 导入指定jar包
      1. 右键项目,新建一个名为lib的文件夹
      2. mysql-connector-java-8.0.23.jar复制到文件夹中
      3. 右键jar包,点击add as library
  2. 通过代码实现JDBC六大步

public class JDBCTest {
        //这里的抛出的异常应该包含驱动、连接、sql异常等
    public static void main(String[] args) throws  Exception{
        //1. 加载驱动,必须正确的在lib文件夹下导入jar包
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2. 获取连接
        //用户名
        String username = "root";
        //密码,是自己数据库的密码,不一定都是root
        String pwd = "root";
        //连接的url,只要修改问号前的数据库名为自己的即可(当前为2109)
        String url = "jdbc:mysql://localhost:3306/2109?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";
        Connection conn = DriverManager.getConnection(url, username, pwd);
        //3. 准备发送SQL的工具
        //往学生表中添加一条学生信息
        String sql = "insert into t\_student(stu\_name,stu\_age,stu\_sex,stu\_class,stu\_place) VALUES('lisi',18,'男','二年级','新乡')";
        PreparedStatement ps = conn.prepareStatement(sql);
        //4. 发送执行SQL
        int n = ps.executeUpdate();//执行SQL,增删改返回受影响条数
        if(n>0){                   //实际上n就是navicat里插入时显示的受影响的行数
            System.out.println("添加成功");
        }else{
            System.out.println("添加失败");
        }
        //5. 结果集 略,查询操作才会用到
        //6. 释放资源
        ps.close();     //先关小的资源
        conn.close();   //后关大的资源
    }
}

三、 结果集的处理

  • ResultSet:结果集

  • 底层原理:指针操作,类似Iterator迭代器

  • next():判断是否存有下一元素

  • getXxx(int类型的列的顺序,从1开始):获取某个字段的值

  • getXxx(“字段名”):获取某个字段的值

    • Xxx:表示字段的数据类型,首字母大写
    • 指定字段名更常用,更清晰
        //前面两步的数据库的加载驱动以及连接省略
        //3. 准备发送sql
        String sql = "select \* from t\_student";
        PreparedStatement ps = conn.prepareStatement(sql);
        //4. 发送sql并执行
        ResultSet rs=ps.executeQuery();
        //5. 处理结果集
        while (rs.next()){//当拥有下一元素时,才进入循环
            //获取字段的值
            int stuId = rs.getInt(1);
            String stuName = rs.getString(2);
            int stuAge = rs.getInt(3);
            String stuSex = rs.getString("stu\_sex");
            String stuClass = rs.getString("stu\_class");
            String stuplace = rs.getString("stu\_place");

            //输出查看
            System.out.println(stuId+" "+stuName+" "+stuAge+" "+stuSex+" "+stuClass+" "+stuplace);
        }
        //6. 释放资源 由于rs是在ps的基础上存在的,因此先关rs的资源
        rs.close();      
        ps.close();
        conn.close();


四、数据绑定

  • 将用户输入的数据,绑定到SQL中

1、字符串拼接

  1. 在需要使用用户数据的位置,通过对应变量替换
  2. 如果为非字符串类型:"+变量名+"
  3. 如果为字符串类型(包含日期及枚举):' "+变量名+" '
package com.bz.test;

public class JDBCTest {
    public static void main(String[] args) throws  Exception{
        //1. 加载驱动
        //2. 获取连接
        //3. 准备发送SQL的工具,前三步省略
        //往学生表中添加一条学生信息
        
        //接收用户信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的姓名:");
        String name=sc.next();
        System.out.println("请输入你的年龄:");
        int age=sc.nextInt();
        System.out.println("请输入你的性别(男/女):");
        String sex=sc.next();
        System.out.println("请输入你的年级:");
        String clazz=sc.next();
        System.out.println("请输入你的地区:");
        String place=sc.next();

        //根据用户填写的信息,书写SQL
        String sql = "insert into t\_student(stu\_name,stu\_age,stu\_sex,stu\_class,stu\_place) VALUES('"+name+"',"+age+",'"+sex+"','"+clazz+"','"+place+"')";
        //输出sql
        System.out.println(sql);

        PreparedStatement ps = conn.prepareStatement(sql);
        //4. 发送执行SQL
        int n = ps.executeUpdate();//执行SQL,增删改返回受影响条数
        if(n>0){
            System.out.println("添加成功");
        }else{
            System.out.println("添加失败");
        }
        //5. 结果集 略
        //6. 释放资源 略
        
    }
}

2、 ?占位符

  • 是JDBC中的一种特殊语法,作用为进行数据绑定
  • 使用方法:
    1. 在需要使用用户数据的位置,通过?代替(占位)
    2. 在发送SQL之前,给占位符依次赋值
    3. setXxx(占位符的序号(从1开始),占位符对应的值)
package com.bz.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;

public class JDBCTest {
    public static void main(String[] args) throws  Exception{
        //1. 加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2. 获取连接
        //用户名
        String username = "root";
        //密码
        String pwd = "root";
        //连接的url
        String url = "jdbc:mysql://localhost:3306/2109?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";
        Connection conn = DriverManager.getConnection(url, username, pwd);
        //3. 准备发送SQL的工具


![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/4bc523a784f7467bb78e983d1e4a588d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1770722779&x-signature=ODfShoRRnpAJcgX%2FOiRuPUCeLIw%3D)
![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/722e0801245a4856b7c4dcf49f665b1a~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1770722779&x-signature=Ig%2Foj9rP9aBZJJne9HZI3I%2BBh%2Fg%3D)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://gitee.com/vip204888)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**