高效掌握JDBC技术(一)

这篇具有很好参考价值的文章主要介绍了高效掌握JDBC技术(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

✅作者简介:CSDN内容合伙人,喜欢学习后端语言的大学生,同时也是一位新晋万粉博主
✨个人社区:微凉秋意社区
🔥系列专栏:JDBC技术
📃推荐一款模拟面试、刷题神器👉注册免费刷题

🔥前言

以前学习的数据库连接技术: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的工具
        //往学生表中添加一条学生信息
        //接收用户信息
        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(?,?,?,?,?)";
        
        PreparedStatement ps = conn.prepareStatement(sql);
        //给占位符赋值
        ps.setString(1,name);
        ps.setInt(2,age);
        ps.setString(3,sex);
        ps.setString(4,clazz);
        ps.setString(5,place);

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

两种数据绑定的区别

  • SQL注入攻击:利用填写数据巧妙使SQL语句中的某些判断条件失效
方式 特点 使用场景 实战建议
字符串拼接 可能被SQL注入攻击攻击 可以拼接表名、字段名、关键字 需要拼接关键字时使用,如:排序
?占位符 可以防止SQL注入攻击 不能对表名、字段名、关键字占位 通常使用都是占位符

五、面对异常

可能出现的异常:

  1. 类加载问题:Driver的路径不对
  2. 数据库、用户名、密码不对
  3. sql语法错误:在sql下方打印该语句,查看语法问题
  4. 数据绑定不对:字符串拼接错误、?占位符赋值有误
  5. 获取结果集字段值时有误:检查字段顺序、字段名、数据类型

解决方案1:

  1. 先查看控制台的异常日志,锁定实际抛出异常的代码位置
  2. 结合报错的详细信息,分析出错原因
  3. 复杂问题,尝试百度

解决方案2:

  1. 通过输出语句的位置,锁定实际抛出异常的代码位置
  2. 分析出错原因

实战建议:

方案1+方案2文章来源地址https://www.toymoban.com/news/detail-404630.html

  1. 观察异常日志,锁定出错位置
  2. 结合报错的详细信息+输出语句,确定出错的原因
  3. 复杂问题,尝试百度

到了这里,关于高效掌握JDBC技术(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 医疗机构,快速掌握一种高效电力供应!

    在现代医疗环境中,各种医疗设备的顺畅运行对于确保患者的健康和医疗流程的有效性至关重要。然而,电力供应的不稳定性或中断可能会对医疗设备和系统造成严重影响。 为了应对这一挑战,蓄电池作为备用电源已经成为医院的重要组成部分。但是,单纯地安装蓄电池并不

    2024年02月10日
    浏览(43)
  • Docker容器常用命令大全:熟练掌握使容器优化更加高效

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月16日
    浏览(62)
  • “智能查单轻松实现批量快递查询,高效掌握快递物流信息!“

    亲爱的用户,你是否常常为了查询大量快递单号而感到烦恼?不用担心,我们已经为你提供了一种高效、智能的解决方案!现在,只需一键操作,即可实现批量快递查询,迅速了解每个单号的详细物流信息。 首先,我们要进入快递批量查询高手主页面,并点击高级设置, 在

    2024年02月12日
    浏览(44)
  • 掌握两种局域网管理技巧 让企业网络更高效

    每个公司都有自己的局域网,如何让自己公司的局域网上网更高效,yii666的小编带您一起去借鉴学习别人的经验技巧,来改善我们的上网质量。 工作站上网你“作主” 单位中的局域网共由十台工作站、一台服务器联网组成,每一台工作站的ip地址都是由局域网中的Windows 200

    2024年02月07日
    浏览(48)
  • GPT引领学习之旅:弥补信息差,助力程序员高效掌握Elasticsearch

    Elasticsearch作为一款流行的开源搜索和分析引擎,持续迅速发展,随着版本的更新,功能和特性也在不断变化。GPT虽然具备大量的计算机科学、编程语言和工具相关的知识,但其知识截止于2021年。为了弥补GPT与实际情况之间的信息差,我们可以采取以下策略,将GPT与实际情况

    2024年02月02日
    浏览(112)
  • 视频批量高效剪辑,支持将视频文件转换为音频文件,轻松掌握视频格式

    在数字化时代,视频内容日益丰富,管理和编辑这些视频变得愈发重要。然而,传统的视频剪辑软件往往操作复杂,难以满足高效批量处理的需求。现在,一款全新的视频批量剪辑神器应运而生,它支持将视频文件一键转换为音频文件,同时轻松掌握各种视频格式,让你的视

    2024年04月14日
    浏览(62)
  • 掌握这5款 Edge插件,让你的浏览器使用更高效!

    您好,今天我想向您推荐两款不常用的 Edge 插件,它们可以帮助您更高效地浏览网页和管理标签页。这些插件可能不像一些常见的插件那样广为人知,但它们的功能却非常实用。 IHome新标签页插件 下载地址: https://microsoftedge.microsoft.com/addons/detail/ihome%E5%8E%9Fbdtab%E6%96%B0%E6%A0%

    2024年02月04日
    浏览(46)
  • 晨曦记账本筛选支付宝收支明细,轻松掌握账户总花销,高效管理财务!

    晨曦记账本是一款专业的财务管理软件,可以帮助用户轻松记录和管理自己的收支明细。通过使用晨曦记账本,用户可以轻松筛选出支付宝的收支明细,更好地掌握自己的财务状况。 首先,第一步,我们要进入晨曦记账本主页面,在左上方的根据旁下拉列表选择“收支账户”

    2024年02月07日
    浏览(49)
  • 掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)

    在Go语言中,结构体(Struct)是一种自定义的数据类型,用于封装不同类型的数据字段。结构体可以看作是一种用户自定义的数据结构,用于组织和管理相关的数据。结构体由一组字段(Fields)组成,每个字段可以是不同的数据类型,可以是基本类型(如整数、浮点数、布尔

    2024年03月26日
    浏览(52)
  • 掌握 Spring Boot 运行内存及内存参数设置:助力高效应用部署与优化

    pring Boot 是当今非常流行的 Java 应用框架之一,在企业级应用开发中被广泛使用。应用部署和优化是企业级应用开发的一个非常重要的方面。在这篇博客中,我们将学习如何掌握 Spring Boot 运行内存及内存参数设置,从而助力高效的应用部署和优化。 Java 应用程序通过 Java 虚拟

    2024年01月21日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包