当前位置: 首页 > news >正文

【MySQL】Java代码操作MySQL数据库 —— JDBC编程

目录

1. Java的JDBC编程

1.1 Java的数据库编程:JDBC

 1.2 JDBC工作原理

1.3 如何在项目中导入数据库驱动包

如何下载数据库驱动包

jar包如何引入项目中

2. 编写JDBC代码

1. 创建并初始化一个数据源(DataSource)

2. 和数据库服务器建立连接

3. 构造 SQL 语句

4. 执行 SQL 语句

5. 释放必要的资源

总结

代码实现查询操作

3. JDBC常用接口和类

3.1 JDBC API

3.2 数据库连接Connection

3.3 Statement对象

3.4 ResultSet对象

耦合、内聚


1. Java的JDBC编程

JDBC(Java Database connect)就是 Java代码操作数据库

真正在公司中操作数据库,99.9999%的情况都是通过代码来操作的,很少会手动在客户端里输入sql语句,所以我们之前用cmd,而不用navicat等之类的数据库客户端的原因。系统中执行了10w次sql,也不一定手动敲一次sql。

1.1 Java的数据库编程:JDBC

  • 数据库编程,是需要数据库服务器提供一些API,供程序猿调使用的。
  • API,即Application Programming Interface,应用程序编程接口是一组类/函数提供给程序猿,让我们去调用,完成一些功能。
  • 各种数据库,MySQL, Oracle, SQL Server在开发的时候,都提供了一组各自的编程接口(API)。
  • 即给你个软件,你能对他干啥(代码层次上的),基于它提供的这些功能,就可以写一些其他代码了。
  • 如MySQL, Oracle, SQL Server等其他关系型数据库,在开发时设置的API接口是不完全相同的,没有一个标准,大大增加了程序猿的学习成本。
  • 于是Java设计出一套api的规范,其他数据库提供的api都要与Java设计api的规范对接上,其他数据库就在自己的api基础上加以修改,转换为java的api形状。程序猿只要了解一套api,就可以操作各种数据库了。java设计的标准API 就是JDBC

JDBC(Java Database Connectivity,Java数据库连接)是Java语言用于连接和操作数据库的标准API,它提供了一套统一的接口,允许Java程序与多种关系型数据库(如MySQL、Oracle、SQL Server等)进行交互,而无需关心底层数据库的具体实现细节。它是一种用于执行SQL语句的Java API,是Java中的数据库连接规范。

这个API由 java.sql.*,javax.sql.*包中的一些类和接口组成,为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

数据库的api是怎么对接上JDBC的:这些数据库有自己的原生api,数据库厂商专门提供了一个驱动程序(软件),通过这个驱动程序把原生api转换成符合JDBC要求的api。

  • 驱动程序起到的作用,类似于转接头,扩展坞。平时经常见到硬件的驱动,例如鼠标驱动。
  • 硬件的驱动是让操作系统认识新的硬件设备,数据库的驱动是让JDBC能认识数据库的api
  • Java程序猿要想进行数据库开发,就需要在项目中导入对应数据库的驱动包,才能编写代码。

 1.2 JDBC工作原理

JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。

JDBC访问数据库层次结构:

JDBC优势:
  • Java语言访问数据库操作完全面向抽象接口编程。
  • 开发数据库应用不用限定在特定数据库厂商的API。
  • 程序的可移植性大大增强。

    要想在程序中操作mysql就需要先安装mysql的驱动包,并且要把驱动包引入到项目里。

    1.3 如何在项目中导入数据库驱动包

    驱动包从哪里来?数据库厂商提供的:

    1. mysql的官方网站获取(下策,mysql被oracle 收购之后官网也合并,麻烦)
    2. github
    3. maven 中央仓库

    maven相当于应用商店。通过应用商店,就可以访问到软件程序包下载下来。中央仓库是服务器,托管了各种软件程序包。

    例如:手机app,金铲铲之战,可以去腾讯官网下载,也可以去应用商店(华为商店,小米商店...)

    如何下载数据库驱动包

    Maven Repository: mysqlhttps://mvnrepository.com/search?q=mysql

    注意此处的版本,大版本要和数据库服务器匹配,数据库服务器用的是5系列,此处的驱动包也得用5系列,不能用8系列。小版本无所谓大版本不能错。

    • .jar 是 java 中常见的后缀类型。
    • java写的程序,如何发布给别人。 JDBC是通过jar包发布的。读作架包,不是架包。

    java发布程序的典型方式:

    1. java通过 .java源文件编译成 .class文件,jvm来解释执行 .class
    2. 每个.java 都 一 一对应一个 .class,如果代码里 .java非常多呢(类非常多)?
    3. 把一大堆的 .class 给打成压缩包(类似于.rar .zip).jar,把jar包拷贝给对方,对方就可以直接使用jvm来运行了。
    4. 此处,mysql 驱动包的这个jar不是单独运行的jar,可以把它导入到项目中,然后就可以调用其中的方法和类来进行编程了。

    jar包如何引入项目中

    数据库驱动包,每次创建项目就要导入一次。实际开发中,创建项目是非常低频的操作。一两年都没机会创建一次项目。

    1)创建一个Directory(目录)

    创建后,选中,将mysql驱动包复制粘贴到里面;这里不需要解压,jvm会自动识别

    2)把这个目录标记成项目的库(library)

    library(图书馆),在计算机中(idea)里面是库的意思

    • 此时idea就识别出这里面有哪些目录,有哪些的类,以及.class文件,识别成功就导入成功了。
    • idea能识别这个目录里的jar包,从而就可以调用里面的类来写代码了。

      2. 编写JDBC代码

      JDBC 需要通过以下步骤来完成开发:

      1. 创建并初始化一个数据源
      2. 和数据库服务器建立连接
      3. 构造 SQL 语句
      4. 执行 SQL 语句
      5. 释放必要的资源

      这里的代码是固定套路。正因为如此,实际开发中,就会使用一些框架来简化数据库操作代码,MyBatis这样的框架就是如此。框架是一直在变的,但是JDBC是不变的。

      数据源:数据从哪里来;这里描述数据库服务器在哪里,通过DataSource类(接口)来进行描述

      1. 创建并初始化一个数据源(DataSource)

      DataSource 意思:数据源

      其中DataSource接口就是JDBC给我们提供的API,来自java.sql这个包中的接口;MysqlDataSoutce类(实体类)来自我们上面导入的mysql驱动包中,这里发生了向上转型(父类引用指向子类对象)

      然后再向下转型,为什么呢? 因为 setUrl方法只有子类中有,父类中没有;父类引用不能调用子类中独有的方法,所以我要转回来,我要使用父类中没有但是子类拥有的方法。

      上述方式写法仅仅是因为Java圈中流行那样写的

      URL 计算机里的一个常见术语, 唯一资源定位符,描述网络上的某个资源所在的位置。

      setUrl 与 setURL一样没区别,之所以这样设定,就是为了减少程序猿的心智负担

      "jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false"

      用户名默认是root;安装数据库的时候密码是啥就写啥;这几个东西都设置进去,才能够访问数据库服务器

      2. 和数据库服务器建立连接

      Connection 意思:连接

      这里使用的Connection类 一定是JDBC提供的;建立成功就连接成功了,没成功就抛出异常(这里已经声明异常了)

      3. 构造 SQL 语句

      这里插入的前提是在数据库中已经创建过了这个表

      由上图代码知,即使使用代码来操作数据库,还是靠sql语句,只不过是换成用代码来构造sql,前面sql的各种语法仍然有效

      PreparedStatement 语句是对sql语句进行预编译一下,为什么要进行提前预编译一下:

      4. 执行 SQL 语句

      把 sql语句(预编译过的)发送给数据库服务器,由服务器做出响应

      这里使用insert、delete、update ,sql语句操作,都是用executUpdate代码方法,返回值为int类型,表示影响到的行数

      如果使用select ,sql语句操作,则用 executeQuery代码方法,更复杂一点,具体代码操作看最后

      5. 释放必要的资源

      谁是后创建的,谁就先释放 —— “后进先出”

      数据库的客户端和服务器,之间进行通信的时候,是要消耗一定的系统资源的,包括不限于,CPU,内存,硬盘,带宽......

      上述代码存在一些问题:

      我们构造SQL语句的时候,要插入的数据是写死的(硬编码),更合适的做法是把数据通过其他方式让用户输入(比如通过控制台输入)

      改进后:

      通过这种方式确实可以完成用户动态输入数据的效果,但是这种写法代码,非常容易出错,而且存在一个严重问题:

      如果用户不好好输入,没有按照对应的数据输入,而是在控制台中输入了 王五'); select * from xxXX 或者删库语句 drop database....

      因此这种写法容易被sql注入,也就是网络安全中的典型攻击方式(输入过程中夹带私货)

      更好的写法是,借助这个PreparedStatement的拼装功能来实现

      在拼接好数据后,打印一下statement,就在控制台中看到拼接后的语句了

      如果你执行这个代码,出错了,就可以把Statement打印出来,看看这里哪里有语法错误,或者也可以直接把这个sql拷贝到控制台中执行。

      总结

      JDBC编程的基本工作

      准备工作:

      1. 下载mysql 驱动包 maven中央仓库
      2. 导入到项目中 复制到项目目录下,标志为库(library)

      编写代码:

      1. 创建数据源(描述数据库服务器所在的位置)
      2. 建立连接
      3. 构造 SQL 语句
      4. 执行 SQL 语句
      5. 释放资源

      代码实现查询操作

      执行SQL语句的时候分情况:

      如果构造SQL语句,是使用insert、delete、update 操作,都是用executUpdate代码方法,返回值为int类型,表示影响到的行数

      如果构造SQL语句,是使用select 操作,则用 executeQuery代码方法

      对查询来说,返回结果不是单纯的int 了,而是ResultSet对象;resultSet 可以认为是返回了一张表,使用迭代器遍历这张表,然后再控制中显示出来。

      3. JDBC常用接口和类

      3.1 JDBC API

      在Java JDBC编程中对数据库的操作均使用JDK自带的API统一处理,通常与特定数据库的驱动类是完全解耦的。所以掌握Java JDBC API (位于 java.sql 包下) 即可掌握Java数据库编程。

      3.2 数据库连接Connection

      Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:
      • 一种是通过DriverManager(驱动管理类)的静态方法获取:

      • 一种是通过DataSource(数据源)对象获取。实际应用中会使用DataSource对象。
      • 以上两种方式的区别是:
      1. DriverManager类来获取的Connection连接, 是无法重复利用的,每次使用完以后释放资源时,通过connection.close()都是 关闭物理连接
      2. DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是 可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将Conncetion连接对象 回收

      3.3 Statement对象

      Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象

      实际开发中最常用的是 PreparedStatement对象,以下对其的总结:
      • SQL预编译
      • 占位符:?下标从1开始
      • 占位符不能使用多值
      • 阻止常见SQL注入攻击
      • 参数化SQL查询
      • 性能比Statement高
      主要掌握两种执行SQL的方法:
      • executeQuery() 方法执行后返回单个结果集的,通常用于select语句
      • executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete 语句

      3.4 ResultSet对象

      ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供了对这些行中数据的访问。
      ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
      面试问答:
      1.数据库连接有哪些方式?分别有什么区别
      ⒉数据库Statement和PreparedStatement有什么区别?

      耦合、内聚

      耦合:是两个模块之间的关联关系是不是非常紧密,是不是这边的变化会影响到另外一边。

      高耦合,两个模块关联非常紧密,一边变化影响另一边程度比较大。

      低耦合,两个模块关系不紧密,一边变化影响另一边程度比较小。

      写代码要追求低耦合。如果耦合高了,随便改某个代码都会引起其他模块出现bug。

      内聚:把相同的/相关联的功能,放到一起,内聚就高。零零散散哪里都有,内聚就低。

      一个模块最好只实现一个功能。

      写代码追求高内聚,低耦合。即相同功能代码放到一起,同时模块与模块之间不要有太大影响。


      好啦Y(^o^)Y,本节内容到此就结束了。下一篇内容一定会火速更新!!!

      后续还会持续更新MySQL方面的内容,还请大家多多关注本博主,第一时间获取新鲜的知识。

      如果觉得文章不错,别忘了一键三连哟!

      相关文章:

      【MySQL】Java代码操作MySQL数据库 —— JDBC编程

      目录 1. Java的JDBC编程 1.1 Java的数据库编程:JDBC 1.2 JDBC工作原理 1.3 如何在项目中导入数据库驱动包 如何下载数据库驱动包 jar包如何引入项目中 2. 编写JDBC代码 1. 创建并初始化一个数据源(DataSource) 2. 和数据库服务器建立连接 3. 构造 SQL 语句…...

      Marmoset Toolbag 5.0 中文汉化版 八猴软件中文汉化版 免费下载

      八猴安装包下载链接 https://pan.baidu.com/s/1Mgy3Mrlrb3Tvtc8w7Zn1nA?pwd6666 提取码:6666 Marmoset Toolbag是由Monkey公司推出一款专业动画渲染软件,也叫做八猴渲染器。该软件主要特征功能是可以进行实时模型观察、材质编辑和动画预览,…...

      Java编程中常见错误的总结和解决方法

      1. 找不到文件 问题描述:尝试编译一个名为ChangeCha.java的文件,但编译器找不到这个文件。错误信息:javac: 找不到文件: ChangeCha.java解决方法:检查文件名是否正确,文件是否存在于当前目录,或者路径是否…...

      【GESP】C++三级练习 luogu-B2114 配对碱基链

      GESP三级练习,字符串练习(C三级大纲中6号知识点,字符串),难度★✮☆☆☆。 题目题解详见:https://www.coderli.com/gesp-3-luogu-b2114/ 【GESP】C三级练习 luogu-B2114 配对碱基链 | OneCoderGESP三级练…...

      C++类设计新思路:封装结构体成员变量

      C++类设计新思路:封装结构体成员变量 引言 在C++编程里,类是封装数据和行为的重要手段。常规的类设计直接把成员变量定义在类中,再通过成员函数访问和修改这些变量。不过,有时候我们可以采用不同的设计思路,例如将成员变量封装到结构体里,这样可能会带来一些好处。本文…...

      图像预处理-形态学变换

      针对二值化图像,其有两个输入,一个输出:输入为原图像、核(结构化元素),输出为形态学变换后的图像。基本操作有腐蚀和膨胀。 一.核 联想到之前的卷积核,也是一种核。 此时的核就跟卷积核不太一…...

      关于百度模型迭代个人见解:技术竞速下的应用价值守恒定律

      就在前天,在 2025 年 4 月 25 日的百度 Create 开发者大会上,文心大模型 4.5 Turbo 与 X1 Turbo 的发布再次将 AI 行业带入 "涡轮加速" 时代。这两款模型不仅在多模态理解、逻辑推理等核心指标上实现突破,更以80% 的价格降幅重塑行…...

      从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 基础概念

      从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 基础概念 第一部分:概率与统计基础 第1节:基础概念:随机变量、概率分布、大数定律与中心极限定理 一、随机变量与概率分布:用数学描述市场…...

      混沌工程领域常用工具的对比分析

      以下是混沌工程领域常用工具的对比分析,涵盖主流工具的核心功能、优势、适用场景及局限性,帮助技术团队根据自身需求选择合适的工具: 一、故障注入工具对比 工具核心特点优势适用场景局限性生态集成开源/付费Chaos MonkeyNetflix 开源,随机终止生产环境实例,模拟硬件/进程…...

      LINUX的使用(2)- 安装软件

      0.防火墙相关 启动防火墙: sudo systemctl start firewalld #查看防火墙列表 firewall-cmd --list-ports 设置防火墙开机自启: sudo systemctl enable firewalld 检查防火墙状态: sudo firewall-cmd --state 允许某个端口(如端…...

      一主多从+自组网络,无线模拟量信号传输专治布线PTSD

      无线模拟量信号传输模块通过无线方式实现模拟量信号的传输,采集工业现场标准4~20mA电流信号,并将其转换为无线信号进行传输。 以下是关于无线模拟量信号传输模块实现无线模拟量信号传输的详细介绍: 一、模块原理 无线模拟量信号传输模块的…...

      IDEA中使用Git

      Git工作流程 创建远程仓库 现在我们已经在本地创建了一个Git仓库,但是这只能满足我们单人开发,如果想要团队协作,还需要一个远程仓库 目前比较流行的远程仓库,有下面这两个: github:https://github.com …...

      Go RPC 服务方法签名的要求

      在 Go 中,RPC 方法的签名有严格的要求,主要是为了保证方法的调用能够通过网络正确地传输和解析。具体要求如下: 1. 方法必须是导出的 RPC 服务的方法必须是导出的(即首字母大写)。这是因为 Go 的反射机制要求服务方法…...

      Ant(Ubuntu 18.04.6 LTS)安装笔记

      一、前言 本文与【MySQL 8(Ubuntu 18.04.6 LTS)安装笔记】同批次:先搭建数据库,再安装JDK,后面肯定就是部署Web应用。其中Web应用的部署使用 Ant 方式,善始善终,特以笔记。 二、准备 &#xf…...

      相机DreamCamera2录像模式适配尺寸

      在开发中遇到 一个问题,相机切换视频模式时,预览时,界面不能充满屏幕两侧有黑边,客户要求修改,在此记录 一问题现象: 系统相机在视频模式下预览时如下现象如图1,期望现象如图2: 图1 …...

      Animate 中HTMLCanvas 画布下实现拖拽、释放、吸附的拼图游戏

      1.舞台上物体拖拽 2.松手以后,检查是否移动到范围内,是则自动吸附 3.播放音效 4.变量1,显示在舞台的动态文本中 1.实现拖拽 下面代码实现拖拽和释放 地图模块 //记录原始位置 var OriXthis.my_mc.x; var OriYthis.my_mc.y;this.my_mc.on(&q…...

      第十一章-PHP表单传值

      第十一章-PHP表单传值 一&#xff0c;核心概念 1. 表单的基本结构&#xff08;HTML&#xff09; 通过HTML的<form>标签定义表单&#xff0c;关键属性包括&#xff1a; action: 指定处理表单数据的PHP脚本路径&#xff08;如action"process.php"&#xff09…...

      互联网大厂Java求职面试:从Java核心到微服务的深度探索

      场景引入: 在一个阳光明媚的早上,谢飞机满怀信心地走进了一家知名互联网大厂的面试房间。面试官坐在桌子的另一端,手中拿着一份简历,面带微笑地开始了今天的面试。 第一轮提问:核心语言与平台 面试官: "谢飞机,你好。我看到你熟悉Java SE,能不能简单介绍一下Ja…...

      微服务即时通信系统(十二)---入口网关子服务

      目录 功能设计 模块划分 业务接口/功能示意图 服务实现流程 网关HTTP接口 网关WebSocket接口 总体流程 服务代码实现 客户端长连接管理封装(connectionManage.hpp) proto文件的编写 身份鉴权proto 事件通知proto 各项请求的URL的确定 服务端完成入口网关服务类…...

      ES练习册

      es索引结构和数据实例 这里提供索引结构和数据实例提供给大家使用练习&#xff0c;希望大家能够一起成长进步~~~~ #添加索引 PUT /ecommerce_products {"settings": {"number_of_shards": 3,"number_of_replicas": 1,"analysis": {&…...

      运算符分为哪几类?哪些运算符常用作判断?简述运算符的优先级

      运算符主要分为以下几类‌&#xff1a; ‌算术运算符‌&#xff1a;用于执行基本的数学运算&#xff0c;如加、减、乘、除、取模等。例如&#xff1a;、-、*、/、%‌。‌赋值运算符‌&#xff1a;用于将值赋给变量。例如&#xff1a;、、-、*、/、%‌。‌比较运算符‌&#xff…...

      shell编程基础知识及脚本示例

      文章目录 前言一、shell变量1.命名规则2.定义及使用变量 二、shell传递参数1.位置参数2. 任意参数 三、shell一维数组0.定义方式1.定义并获取数组的单个元素2.定义并获取数组的所有元素3.定义并获取数组的元素个数4.定义并获取数组的元素索引 四、shell条件判断语法五、shell常…...

      再学GPIO(一)

      GPIO输出模式 STM32的GPIO&#xff08;General Purpose Input Output 通用输入输出&#xff09;引脚支持多种输出模式&#xff0c;不同模式决定了引脚的驱动能力和信号特性。STM32的GPIO输出模式主要分为以下4种&#xff1a; 推挽输出&#xff08;Push-Pull Output&#xff09;…...

      OpenCV彩色图像分割

      OpenCV计算机视觉开发实践&#xff1a;基于Qt C - 商品搜索 - 京东 灰度图像大多通过算子寻找边缘和区域生长融合来分割图像。彩色图像增加了色彩信息&#xff0c;可以通过不同的色彩值来分割图像&#xff0c;常用彩色空间HSV/HIS、RGB、LAB等都可以用于分割。本节使用inRange…...

      django filter 排除字段

      在Django中&#xff0c;当你使用filter查询集&#xff08;QuerySet&#xff09;时&#xff0c;通常你会根据模型的字段来过滤数据。但是&#xff0c;有时你可能想要排除某些特定的字段&#xff0c;而不是过滤这些字段。这里有几种方法可以实现这一点&#xff1a; 使用exclude方…...

      多模态大语言模型arxiv论文略读(四十五)

      CAT: Enhancing Multimodal Large Language Model to Answer Questions in Dynamic Audio-Visual Scenarios ➡️ 论文标题&#xff1a;CAT: Enhancing Multimodal Large Language Model to Answer Questions in Dynamic Audio-Visual Scenarios ➡️ 论文作者&#xff1a;Qil…...

      Vue3 通过Vue3-Print-Nb在线工单打印 模板打印 自定义打印 打印下载

      介绍 通过在应用中集成打印功能&#xff0c;用户可以直接从页面打印工单&#xff0c;不用导出文件或使用其他外部工具。节省时间&#xff0c;提高效率&#xff0c;特别是当需要大量打印时。同时也可以将文件模板上传到数据库&#xff0c;提供给部门工作自行下载。 开源文档&am…...

      视觉“解锁”触觉操控:Franka机器人如何玩转刚柔物体?

      集智联机器人&#xff08;Plug & Play Robotics&#xff09;&#xff0c;简称PNP机器人&#xff0c;是Franka Robotics和思灵机器人金牌合作伙伴&#xff0c;集智联机器人团队成员均来自于国内外机器人行业知名企业&#xff0c;具有较强的学术背景。PNP机器人致力于为客户提…...

      FlinkUpsertKafka深度解析

      1. 设计目标与工作机制 Upsert-Kafka Connector 核心功能&#xff1a;支持以 Upsert&#xff08;插入/更新/删除&#xff09; 模式读写 Kafka 数据&#xff0c;适用于需要动态更新结果的场景&#xff08;如聚合统计、CDC 数据同步&#xff09;。数据流类型&#xff1a; 作为 …...

      百度Create大会深度解读:AI Agent与多模态模型如何重塑未来?

      目录 百度Create大会亮点全解析&#xff1a;从数字人到Agent生态布局 数字人商业化&#xff1a;从"拟人"到"高说服力"的进化 Agent生态&#xff1a;从"心响"App看百度的Agent战略布局 "心响"App的技术架构与创新点 多模态大模型&a…...

      新能源汽车运动控制器核心芯片选型与优化:MCU、DCDC与CANFD协同设计

      摘要&#xff1a;随着新能源汽车产业的迅猛发展&#xff0c;汽车运动控制器的性能和可靠性面临着更高的要求。本文深入探讨了新能源汽车运动控制器中MCU&#xff08;微控制单元&#xff09;、DCDC电源管理芯片和CANFD总线通信芯片的选型要点、优化策略及其协同设计方案。通过综…...

      【软件工程】 白盒测试简介

      1. 前言 在软件测试过程中&#xff0c;白盒测试&#xff08;White-box Testing&#xff09;是一种重要方法&#xff0c;它通过检查程序内部结构来验证软件功能。本文以一道典型的伪代码程序为例&#xff0c;结合白盒测试的基本操作&#xff0c;设计语句覆盖测试用例&#xff0…...

      uniapp自定义一个选择年月日时分的组件。

      <template><view><u-popup :show"timePopShow" mode"bottom" close"close" open"open" :closeOnClickOverlay"true"><view class"popup-container"><!-- 自定义时间内容 --><vi…...

      Git命令(Gitee)

      三板斧&#xff1a; git init //初始化本地仓库 git add . //添加所有文件到缓存区 &#xff08;或指定文件&#xff09; git commit -m "备注" //提交&#xff0c;填写备注 git remote add origin <远程仓库链接> git push -u origin ma…...

      Node.js 应用部署:镜像体积优化与安全的多阶段构建探索

      Node.js 应用部署:镜像体积优化与安全的多阶段构建探索 在开发 Node.js 应用时,部署过程中的镜像体积优化和安全性保障是至关重要的环节。本文将通过两种不同的 Docker 部署方式,深入探讨如何实现高效的镜像体积优化和安全的部署环境。 传统的单阶段构建方式 许多开发者在…...

      深度解析:Web Crawling与Web Scraping的区别与联系

      在现代互联网数据驱动的时代&#xff0c;Web Crawling(网页爬取)和Web Scraping(网页抓取)成为数据采集领域的两大核心技术。尽管两者常被混用&#xff0c;但它们在技术实现、应用目的和操作流程上存在显著差异。本文将基于权威资料&#xff0c;特别是维基百科的定义&#xff0…...

      C# 利用log4net 工作台打印和保存到文件

      目录 ‌log4net‌简介引言1、添加引用库2、添加引用和构建实例3、添加属性配置4、添加配置文件最后 ‌log4net‌简介 log4net‌是一个开源的日志记录组件&#xff0c;专为.NET平台设计。它是Apache log4j框架在Microsoft .NET平台的实现&#xff0c;属于Apache Logging Servic…...

      2025 VSCode中如何进行dotnet开发环境配置完整教程

      我一直都是用Visual Studio 2019来开发C#项目的&#xff0c;用的比较顺手&#xff0c;也习惯了。看其他技术文章有介绍VS Code更轻量&#xff0c;更方便。 所以就想来研究如何使用VS Code&#xff0c;看看它是如何构建代码、调试代码、如何运行C#应用程序。 本文将详细介绍如何…...

      vscode本地化显示远程图形化界面

      远程登陆到服务器端 sudo vim /etc/ssh/sshd_config修改文件中的参数&#xff0c;保存。主要参数如下 配置好上述后需要reload一下ssh,安装xclock。 service ssh reload # 安装x11-apps&#xff0c;这样就可以使用xclock apt install x11-apps查看环境变量,在其中并没有DISPL…...

      STM32 CAN通信 HAL库实战教程:从零到测试成功

      STM32 CAN通信 HAL库实战教程&#xff1a;从零到测试成功 <我打印的是陀螺仪的数据> 目录 简介&#xff1a;为什么学习CAN通信CAN通信基础概念STM32 CAN硬件配置CAN初始化详解CAN数据发送实现CAN数据接收实现测试与验证方法常见问题与解决总结与拓展 1. 简介&#xff1…...

      数据结构强化篇

      应用题 排序 插入排序 void InsertSort (ElemType A[], n int) {int i, j;for (i2; i<n; i) //依次将 A[2]&#xff5e;A[n]插入前面已排序序列if (A[i]<A[i-1]) { //若 A[i]关键码小于其前驱&#xff0c;将 A[i]插入有序表A[0]A[i]; //复制为哨兵&#xff0c;A[0]不存放…...

      泰迪杯实战案例超深度解析:旅游景点游客流量预测与资源优化

      (2025年泰迪杯数据挖掘挑战赛D题特等奖案例) 一、案例背景与目标 1.1 应用场景与痛点 某5A级景区面临以下核心问题: 拥堵严重:节假日热门景点游客密度超过10人/㎡,排队时间长达2小时。 资源浪费:接驳车空载率30%,餐饮点位在非高峰时段闲置率60%。 应急滞后:突发降雨或…...

      qt 3d航迹图

      一般就是三种方法 1.opengl&#xff0c;vtk这种从零自己画&#xff0c;网上也可能有半成品&#xff0c;大多是付费的。 2.重写qwt3d&#xff0c;07年就停止更新了&#xff0c;画出来类似opengl&#xff0c;需要自己修改参数&#xff0c;参数修改不对很难搞&#xff0c;对于经…...

      探索排序算法的奥秘(上):冒泡排序、选择排序、插入排序

      在计算机科学中&#xff0c;排序算法是数据处理的基础工具之一。通过对数据进行有序排列&#xff0c;可以极大地提高数据检索和处理的效率。本文将详细介绍三种经典的排序算法&#xff1a;冒泡排序、选择排序和插入排序。我们将从算法思想、原理、代码实现&#xff08;C语言、P…...

      Stable Diffusion 技术全景解析与行业竞争力分析

      目录 一、Stable Diffusion 技术概览 1. 核心背景 2. 技术架构 二、行业地位与竞品对比 1. 市场定位 2. 核心竞争优势 三、部署成本与硬件要求 1. 硬件配置方案 2. 优化技巧 四、优势与劣势分析 1. 核心优势 2. 主要劣势 五、开源策略与商业模型 1. 开源协议 2. …...

      基于Python的DeepSeek API图形界面开发

      基于Python的DeepSeek API图形界面开发 在人工智能技术广泛应用的今天&#xff0c;如何将强大的API能力与用户友好的界面结合&#xff0c;成为开发者关注的重点。本文将以DeepSeek API为例&#xff0c;详解如何通过Python构建兼具功能性与美观度的GUI应用程序。 一、技术架构…...

      w~嵌入式C语言~合集4

      我自己的原文哦~ https://blog.51cto.com/whaosoft/13870376 一、STM32怎么选型 什么是 STM32 STM32&#xff0c;从字面上来理解&#xff0c;ST是意法半导体&#xff0c;M是Microelectronics的缩写&#xff0c;32表示32位&#xff0c;合起来理解&#xff0c;STM32就是指S…...

      自动驾驶(ADAS)领域常用数据集介绍

      1. KITTI 数据集 简介&#xff1a;由德国卡尔斯鲁厄理工学院与丰田研究院联合创建&#xff0c;是自动驾驶领域最经典的评测基准&#xff0c;涵盖立体视觉、光流、3D检测等任务。包含市区、乡村和高速公路场景的真实数据&#xff0c;标注对象包括车辆、行人等&#xff0c;支持多…...

      【嵌入式八股23】Linux关键指令

      系统关机命令 在 Linux 系统中,有多种命令可用于实现系统关机或重启操作,以下为你详细介绍各命令及其特点: 指令 说明 shutdown该命令能够安全地将系统关机。它允许用户指定关机的时间,还可以在关机前向所有登录用户发送警告消息。例如,shutdown -h now 可立即关机,shu…...

      机器学习的一百个概念(13)布里尔分数

      前言 本文隶属于专栏《机器学习的一百个概念》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索: 知识库创建人机器学习@Shockang机器学习数学基础@Shocka…...