当前位置: 首页> 财经> 访谈 > 汕头百度seo电话_宁夏住房和城乡建设官网_不付费免费网站_收录优美图片app

汕头百度seo电话_宁夏住房和城乡建设官网_不付费免费网站_收录优美图片app

时间:2025/7/9 0:29:10来源:https://blog.csdn.net/m0_68728226/article/details/147026339 浏览次数:0次
汕头百度seo电话_宁夏住房和城乡建设官网_不付费免费网站_收录优美图片app

JavaWeb21-1:Java Web开发的地位、Tomcat服务器

  1. Java Web开发概述
    • 主流地位:Java可用于移动端、桌面应用、机器学习等多个领域,但在Web开发领域优势显著,是Java最主流的研发方向。市场上95%以上的Web端开发都使用Java,其他语言在Web开发方面存在缺陷,难以与Java抗衡。
    • 开发内容:Java主要负责Web开发的后端部分,为前端提供数据支撑,前端负责界面展示。Java的强大在于其丰富的企业级开发框架,能提高开发效率,节约时间。
  2. Tomcat服务器
    • 作用与原理:Tomcat是一个Web应用服务器,用于运行Web程序。由于网络安全限制,计算机之间不能随意访问,Tomcat作为对外窗口,将允许外部访问的资源放在其中运行,解决了程序部署和访问的问题,保护了计算机隐私。
    • 安装与目录结构:推荐使用免安装的解压版Tomcat,目前版本9最主流。解压后的Tomcat包含多个文件夹,如bin存放启动关闭命令;conf存放配置文件;lib存放jar包;logs存放日志;temp存放临时文件;webapps存放程序;work存放JSP文件转换后的Servlet文件。
    • 启动与访问:启动Tomcat可通过bin目录下的startup.bat(Windows系统)或startup.sh(Linux系统)脚本。Tomcat默认端口是8080,启动后可通过浏览器访问,默认访问webapps/root目录下的index.jsp页面。也可在webapps目录下自定义页面进行访问。
    • 运行机制:启动Tomcat服务后,浏览器通过URL(IP加端口)访问服务,服务返回相应资源,如网页、图片、脚本等。其运行机制与之前学的Socket编程类似,Tomcat是成熟产品,底层封装了相关代码。
  3. 手写简易版Tomcat服务应用
    • 目的:通过手写简易版Tomcat,帮助理解Tomcat底层原理,构建编程思维。
    • 实现思路:使用Socket编程实现,创建服务端,定义接收请求的方法。在方法中,通过ServerSocket监听指定端口(如8080),循环接收客户端请求,获取输入流和输出流。同时,封装请求和响应对象,对请求数据进行解析。
    • 解析请求:自定义HttpRequest类,在构造函数中传入输入流,通过循环读取输入流数据到数组,再将数组数据拼接到StringBuffer中,最终转换为字符串进行输出。通过测试类启动服务,可在浏览器访问测试,通过断点调试查看请求数据,目前解析方式存在问题,后续需修改完善。

JavaWeb21-2:简易版Tomcat的完善、Java Web工程的创建与配置

  1. 简易版Tomcat完善
    • 请求资源解析:在获取请求数据后,通过查找字符串中两个空格的位置,利用StringBufferindexOfsubstring方法截取目标资源名称(如hello.html),并提供get方法方便外部获取。
    • 响应机制构建:编写Response类处理响应逻辑。根据请求的uri判断资源是否存在,若为空则指定默认资源路径index.html。通过创建File对象判断资源是否存在,存在则读取文件内容并输出,不存在则返回404错误。
    • 响应格式处理:由于浏览器对响应有特定格式要求,编写createMessage方法对响应数据进行封装。添加状态码(如200表示成功,404表示失败)、数据长度等信息,按照http 1.1 状态码\r\ncontent - length 数据长度\r\n\r\n数据内容的格式返回,确保浏览器能正确解析响应。
    • 功能测试验证:启动服务后,通过浏览器访问不同资源进行测试。如访问不存在的资源返回404错误,访问存在的资源(如test.html)则返回相应内容,成功实现了简易版Tomcat对资源的处理功能。
  2. Java Web工程创建与配置
    • 工程创建步骤:在IDEA中选择java enterprise下的web application创建Java Web工程。创建过程中可选择绑定Tomcat服务器,若首次使用,点击new选择tomcat server并输入解压后的Tomcat路径完成配置,为工程命名后点击finish完成创建。
    • 工程结构解析:创建好的工程除src目录外,新增web文件夹,其中包含web - info目录和index.jsp文件。web - info用于配置Servlet、监听器、过滤器等;index.jsp是默认页面,可自行编辑。工程还自动引入jdk和Tomcat的jsp APIServlet API依赖,这些依赖来自Tomcat的lib目录。
    • 工程启动配置:在IDEA中启动Java Web工程时,若没有Tomcat标志,需编辑配置类。点击加号添加tomcat local,选择已配置好的Tomcat服务器,设置工程的deploymentapplication contextapplication context决定了访问工程的路径,如设置为test,访问时需在8080后加上test;若将其设置为空(保留斜杠),则工程映射到根目录,直接访问8080即可。

JavaWeb22-1:前端技术概述、实际操作示例、开发分工介绍

  1. 前端技术概述
    • 重要性与学习目标:后端开发人员也需掌握前端基础,如HTML、CSS、JS,不必深入学习,会基本使用即可。在实际项目中,后端开发人员也会涉及前端工作,且常借助UI框架开发。
    • 各技术作用:HTML用于编写网页基础标签;CSS用于美化网页;JS用于实现网页动态操作数据。三者结合可构建完整网页,同时介绍了对JS进行封装的jQuery库,使用它能简化代码编写。
  2. 前端开发实践
    • 开发工具与项目创建:推荐使用HBuilder进行前端开发,也可使用WebStorm、VS Code等。以HBuilder为例,创建基本HTML项目,项目包含index.html、CSS、image、js等目录。
    • 代码编写与样式设置:在index.html的body标签内编写HTML代码,如div标签。通过在style属性中设置CSS样式,可调整div的宽、高、背景颜色、边框等样式,也可将CSS代码单独写成一个文件(如index.css),并通过link标签引入到HTML文件中。
    • 交互功能实现:引入jQuery库后,可在script标签内编写代码实现网页交互功能。如通过初始化函数,在页面加载时执行特定操作;为元素添加点击事件,当元素被点击时触发相应函数。
    • 常用标签应用:详细介绍了表单相关的常用标签。使用div、table、input、radio、select、checkbox等标签搭建注册表单,设置输入框类型(text、password)、单选框互斥(通过设置相同name属性)、下拉框(select和option标签)、多选框(checkbox)等功能,还对表单元素样式进行了调整,如设置文本对齐方式、按钮样式(包括宽高、颜色、圆角、字体颜色、鼠标悬停效果等)。
  3. 前端开发分工:在软件公司开发项目时,通常有前端、后端、UI(美工)等岗位。UI使用Photoshop设计网页并提供素材,前端根据设计图和素材,用HTML和CSS将设计效果呈现在网页上,后端负责提供数据 。

JavaWeb22-2:前端与后端的相关知识、表单提交、前端UI组件、后端Servlet、前后端交互的实现过程

  1. 前端表单提交与优化
    • 表单提交设置:在前端表单中添加action属性指定提交路径,method属性指定提交类型(如post)。提交按钮需设置type="submit",点击按钮即可提交表单数据。当前端提交表单到不存在的后台接口时,会提示连接不到请求。
    • 样式与组件优化:原生前端页面样式不够美观,开发中常使用前端UI组件,如layuielement ui。以layui为例,使用时需复制其资源包,包括css、字体、图片、js等文件,然后通过添加相应的class样式来使用,这些组件能快速构建出美观且功能丰富的页面。
  2. 后端Servlet基础与应用
    • Servlet接口原理:Servlet是Java Web后端的重要组件,它是一个接口,实现该接口可使Java类具备接收网络请求并做出响应的功能。与之前手写的服务器程序相比,实现Servlet接口能简化开发过程。实现接口后,只需关注service方法,该方法会自动传入requestresponse对象,分别用于接收请求和做出响应。
    • Servlet使用示例:创建一个普通Java类实现Servlet接口,并重写其中的抽象方法。通过添加@WebServlet注解为类添加映射名字,在浏览器中访问该映射名即可调用类中的service方法。可以在service方法中接收请求参数(如通过request.getParameter方法),并使用response.getWriter().write方法向浏览器输出响应内容。
    • Servlet优化:直接实现Servlet接口需重写多个方法,其中多数方法可能不需要。通过继承HttpServlet类可进行优化,只需重写doGetdoPost方法,这两个方法分别处理getpost请求,且对requestresponse对象进行了功能扩展,使用起来更方便。
  3. 前后端交互实现
    • 前端页面整合:将前端代码整合到Java Web工程中,创建html页面(如register.html)并复制前端代码和样式文件。若页面样式未加载,可能是打包问题,可通过build菜单中的rebuild project重新构建工程解决。
    • 表单数据提交与处理:前端表单提交路径设置为后端Servlet的映射名(如test),根据提交类型(postget),后端会调用相应的doPostdoGet方法。post请求比get请求更安全,因为get请求会将参数暴露在地址栏。后端通过request.getParameter方法根据inputname属性获取表单数据,获取数据时可能遇到中文乱码问题,可通过设置request的字符编码(characterEncoding=utf - 8)解决。

JavaWeb23-1:的Servlet、请求与响应对象、页面跳转

  1. Servlet基础与作用
    • Servlet的地位与功能:Servlet是Java Web开发的基础,无论是否使用框架,开发中都需用到。它实现了Java类接收网络请求并做出响应的功能,是Java程序进行Web开发的关键。
    • 请求与响应的实现:通过继承HttpServlet类,重写doGetdoPost方法来处理不同类型的请求。这两个方法封装了HttpServletRequestHttpServletResponse对象,分别用于表示请求和响应,体现了面向对象的编程思想。
  2. HttpServletRequest对象的功能
    • 参数获取与编码设置HttpServletRequest最基础的功能是接收客户端参数,通过getParameter方法根据参数名获取参数值。同时,它还可设置编码(如utf - 8)来解决中文乱码问题。
    • 其他重要方法getRequestURI用于获取请求的资源名称,getSession用于获取session对象,session一般用于存储登录用户信息。此外,还介绍了URIURL的区别,URL是完整的请求路径,URI是请求的资源名称。
  3. 页面跳转与数据传递
    • 转发跳转:使用request.getRequestDispatcher().forward(request, response)方法实现页面跳转,同时可通过request.setAttributerequest.getAttribute方法在不同资源(如Servlet和JSP)之间传递数据。在JSP中,可通过特殊符号<%%>嵌入Java代码,request是内置对象,可直接使用。数据传递时需注意先setAttribute再跳转,否则无法取值。
    • 重定向跳转:使用response.sendRedirect方法进行重定向跳转。重定向与转发的区别在于:操作对象不同,转发操作request,重定向操作response;浏览器地址栏变化不同,转发地址栏不变,重定向地址栏会改变;转发前后是同一个request对象,重定向前后是两个不同的request对象。因此,若通过request进行数据传递,必须使用转发,重定向会导致数据无法取出。

JavaWeb23-2:重定向时的数据传递、登录模块的实现、session的应用、response的功能以及JSPServlet的关系

  1. 重定向与数据传递:当使用重定向进行页面跳转且需要传递数据时,可借助session实现。因为session的作用域大于request,适用于多页面、多场景的数据共享。而request通常用于简单业务查询场景下的数据存储与传递。
  2. 登录模块实现
    • 页面与Servlet编写:创建login.jsp页面,使用form表单收集用户名和密码,通过post请求提交到loginServlet。在loginServlet中,模拟数据库验证用户名和密码,若验证失败,通过request.setAttribute传递错误信息并转发回登录页面;若验证成功,则将用户名存入session,并重定向到首页。
    • 错误处理与优化:在登录页面展示错误信息时,起初通过复杂的Java代码判断和插入HTML代码实现,后引入EL表达式简化取值操作,EL表达式不仅简化了request.getAttribute的取值过程,还自动处理了非空校验。
    • 枚举的应用:为规范错误信息返回,使用枚举定义错误信息。在实际开发中,枚举可统一管理给客户端返回的信息,方便团队协同开发,开发者只需调用枚举值,无需自行编写具体错误内容。
    • 退出功能实现:在首页添加退出功能,通过a标签发起get请求到logoutServlet,在logoutServlet中销毁session并重定向回登录页面。
  3. response的功能与应用response.getWriter().write方法可向浏览器输出内容。若要返回页面,可直接将页面源代码以字符串形式写入,但可能会遇到中文乱码问题,可通过response.setContentType("text/html;charset=utf - 8")解决。然而,这种方式拼接字符串返回页面较为麻烦,由此引出JSP的应用。
  4. JSPServlet的关系JSP本质上是一个Servlet,是为了方便编写HTML代码而设计的模板。使用Servlet返回HTML代码较为繁琐,而JSP允许以开发HTML代码的形式编写程序,最终会自动转换成Servlet,并将数据以response的形式返回给客户端,大大简化了返回页面的操作。

JavaWeb24-1:涵盖数据库在程序中的作用、类型

  1. Web开发架构与各部分职责:Web开发主要由前端、后端和数据库组成,可能还会包含一些中间件。前端负责用户交互,追求美观简洁与良好的用户体验;后端负责处理业务逻辑,还需应对高并发、负载均衡等问题,工作压力大,岗位需求和薪资待遇相对较高;数据库负责持久化存储数据 。
  2. 数据库类型与主流选择:数据库分为关系型数据库和非关系型数据库。在Java开发中,MySQL是最主流的关系型数据库,超过95%的Java项目使用它。与Oracle相比,MySQL免费且性能差异不大。其他关系型数据库如SQL Server,主要用于微软的C#开发。
  3. 数据库管理工具:数据库是安装在电脑上的服务,需要数据库管理工具进行操作。常见的管理工具包括SQLyog(学生使用较多)、Navicat和DataGrip(公司使用较多)。DataGrip和IDEA是同一家公司产品,操作相似,使用起来更方便。当前MySQL主流版本是5和8,推荐使用8版本,若使用5版本需注意驱动版本匹配问题。
  4. SQL语言分类与数据库学习要点:SQL是用于管理数据库的编程语言,分为数据操作语言(DML,用于操作数据,如插入、修改、删除)、数据定义语言(DDL,用于创建、删除、修改数据库和数据表)、数据查询语言(DQL,用于查询数据)和数据控制语言(DCL,用于控制数据库组件的存取,如事务处理)。学习数据库需掌握基本使用(操作已有数据库)和设计数据库(根据项目需求设计表及表间关系),初级程序员主要掌握基本使用即可 。
  5. MySQL数据库操作
    • 创建数据库:可以使用SQL语句或数据库管理工具创建数据库实例。使用SQL语句创建时,在DataGrip中通过右键选择“new” - “query console”进入查询控制台编写代码。创建数据库的基本语句是create database,为避免中文乱码问题,需设置默认编码集default characterset utf8,还可设置校验字符集(如utf8_general_ci不区分大小写排序,utf8_bin区分大小写排序) 。
    • 创建数据表:创建数据表的基本语法是create table 表名(字段名称 数据类型, …),例如create table user(name varchar(20), id int)。MySQL的数据类型丰富,包括整数类型(如tinyintsmallintint等)、浮点型(floatdouble)、日期类型(datedatetimetimestamp)、字符串类型(varchartext)和二进制类型(用于存储图片、视频等数据,如blob系列),了解这些数据类型是创建字段的基础。

JavaWeb24-2:MySQL数据库的表操作、SQL函数和运算符

  1. 数据表操作
    • 创建表:根据数据类型创建数据表,如创建学生表Student,包含IDint类型)、namevarchar类型)、成绩int类型)等字段。
    • 删除表:使用drop table语句删除数据表,例如drop table user可删除user表,操作时需谨慎。
    • 修改表:通过alter table语句修改表结构,包括新增字段(如alter table student add sex varchar(2))、修改字段(如alter table student change sex gender int)和删除字段(如alter table student drop gender) 。
  2. SQL函数
    • 数学函数abs用于求绝对值,如select abs(-20)返回20;floor返回小于参数的最大整数,如select floor(19.9)返回19;ceil返回大于参数的最小整数,如select ceil(19.01)返回20。
    • 字符串函数insert用于替换字符串部分内容,upperlower分别用于将字符串转大写和小写,leftrightsubstring用于截取字符串,reverse用于反序输出字符串。
    • 日期函数curdate获取当前日期,current_time获取当前时间,now获取当前日期和时间;datediff计算两个日期之间相隔的天数,还能对日期进行加减运算,计算指定天数后的日期或之前的日期。
    • 聚合函数:用于对数据进行统计操作。count统计数据记录数,sum计算字段总和,avg计算平均值,maxmin分别求最大值和最小值。
    • 分组查询:使用group by对数据进行分组统计,如统计租车表中每个客户的租车次数。还可结合order by进行排序(asc升序,desc降序),以及使用having添加筛选条件 。
  3. SQL运算符
    • 算术运算符:包括加减乘除,用于对数据进行基本的数学运算,操作方式与Java中的算术运算类似。
    • 比较运算符:用于比较数据大小关系,如判断成绩是否等于、大于或小于某个值,返回结果为true(1)或false(0) 。
    • 逻辑运算符:有与(and)、或(or)、非(not)运算,用于连接多个条件进行综合判断,逻辑与Java中的逻辑运算相同。
    • 特殊运算符is null用于判断字段是否为空,between...and...用于判断值是否在某个区间内。

JavaWeb25-1:运算符、表设计(主键、外键)、数据关系及多表关联查询

  1. MySQL运算符
    • in查询:用于判断值是否在特定区间内,如select * from student where ID in (1,2,3)可同时查询出ID为1、2、3的数据。
    • 模糊查询:使用like关键字,通过%匹配任意字符。如select * from student where name like '%三%'可查询出名字中包含“三”的学生数据,在实际开发中应用广泛。
  2. 表设计
    • 主键:是表中的一个字段,其值是每一行数据的唯一标识,类似身份证号或学号。一般将主键设置为ID,类型为int,并设置自增属性。添加主键时,在字段后使用primary key关键字,设置自增则添加auto increment关键字。自增可避免手动赋值的麻烦,确保主键值不重复。
    • 外键:也是表中的字段,用于与其他表的主键建立约束关系,以保证业务逻辑的准确性。例如学生表中的班级编号字段作为外键,被班级表的主键约束,确保学生所属班级编号在班级表中存在。但外键会降低效率,一般项目开发中不使用,而是通过人为编写代码保证逻辑准确。
  3. 数据关系
    • 一对一关系:如人和身份证的关系,一张表的一条数据只能对应另一张表的一条数据,反之亦然。实际开发中,一对一关系常优化为将两张表合并为一张表,以减少表关联的复杂性。
    • 一对多关系:以学生和班级为例,一个学生只能属于一个班级,但一个班级可以有多个学生。这种关系通过主外键实现约束,在开发中较为常用。
    • 多对多关系:例如学生选课,一个学生可以选多门课程,一门课程也可以被多个学生选择。实现多对多关系需要借助中间表,中间表包含两个主表的主键字段,通过记录两个主键的对应关系来维护多对多关系,避免了在主表中添加过多字段的问题。
  4. 多表关联查询
    • 一对多查询:查询一对多关系的数据时,需要关联两张表,通过外键建立连接条件。如查询停车区一所有单车信息,需关联停车区表和单车表,以停车区表的ID和单车表的aid作为连接条件。为简化查询,可给表设置别名。
    • 多对多查询:查询多对多关系的数据时,要借助中间表进行间接关联。例如查询张三的选课信息,需关联学生表、课程表和中间表,通过设置连接条件筛选出相关数据,并可对查询结果的列名进行自定义。

JavaWeb25-2:MySQL数据库中索引、事务、视图、触发器和存储过程的概念、作用、使用方法及相关注意事项

  1. 索引
    • 概念与作用:索引是一种特殊的数据库结构,可加快数据表特定记录的查询速度,类似于书的目录。它能提高数据库性能,但创建和维护索引会消耗时间并占用物理空间,因此需合理使用。
    • 索引类型:包括普通索引(无限制条件,可在任意数据类型创建)、唯一索引(索引值必须唯一,主键自带索引)、全文索引(只能创建在文本类型字段上,用于大数据量字符串查询)、单列索引(对应一个字段)、多列索引(多个字段共同组成一个索引)和空间索引(只能建立在空间数据库上,如GIS相关应用)。
    • 设计原则与操作:设计索引时,应在where语句中使用的列上添加索引,且索引值尽量唯一,避免添加过多索引。添加索引使用alter table 表名 add index 索引名(字段名),删除索引使用alter table 表名 drop index 索引名
  2. 事务
    • 概念:事务是将多条SQL语句作为一个整体,要么全部执行,要么一条都不执行。例如在转账场景中,涉及的多条修改语句必须同时成功或失败,否则会出现数据不一致问题。
    • 特性:具有原子性(不可再分割)、一致性(执行前后数据总和等保持一致)、隔离性(一个事务的执行不被其他事务干扰)和持久性(事务提交后数据改变永久生效)。目前无法直接操作演示,后续学习相关知识后再进行演示。
  3. 视图
    • 概念与作用:视图是数据库中的虚拟表,允许不同用户以不同方式查看同一张表的数据。例如在薪资管理场景中,可针对员工表创建不同视图,让普通员工和经理查看不同字段内容。
    • 创建、使用与删除:创建视图使用create view 视图名 as select语句,使用视图直接进行查询,如select * from 视图名,删除视图使用drop view 视图名
  4. 触发器
    • 概念与作用:触发器定义了一系列操作,在对指定表进行插入、更新或删除操作时自动执行。例如可实现数据同步功能,提高开发效率,便于维护,且修改业务时只需修改触发器而无需修改业务代码。
    • 创建与删除:创建触发器时,使用create trigger 触发器名 after insert/delete/update on 表名 for each row指定触发时机和目标表,在beginend之间编写操作内容。删除触发器使用drop trigger 触发器名
  5. 存储过程
    • 概念与作用:存储过程是一组为完成特定功能的SQL语句集合,经过编译存储在数据库中,用户通过指定名称和参数执行,类似于Java中的方法。其优点包括模块化程序设计、执行速度更快和更好的安全机制。
    • 创建、调用与删除:创建存储过程使用create procedure 存储过程名(参数列表),参数列表包含参数方向(如in表示入参,out表示出参)、参数名和参数类型,在beginend之间编写逻辑。调用存储过程使用call 存储过程名(参数值),删除存储过程使用drop procedure 存储过程名。存储过程功能比触发器更丰富,可编写逻辑、接收参数和返回值 。

JavaWeb26-1:JDBC的概念、原理、使用步骤以及相关代码实现

  1. JDBC概述
    • 定义与作用:JDBC(Java Database Connectivity)是独立于特定数据库系统的通用数据库存取和操作公共接口,可用于多种数据库管理。它解决了Java程序连接不同数据库时频繁修改代码的问题,Java程序通过JDBC接口间接操作数据库,由JDBC将操作指令翻译为对应数据库能识别的语句。
    • 组成部分:分为面向应用的API(供开发者调用,用于实现增删改查等操作)和面向数据库的API(供数据库厂商开发驱动程序,实现与具体数据库的连接和指令转换)。
    • 接口分类及功能:包含DriverManager类(管理各种JDBC驱动)、Connection接口(用于连接数据库)、Statement接口(执行SQL语句)和ResultSet接口(接收查询结果集) 。
  2. JDBC原理及操作步骤
    • 原理:首先加载数据库驱动,驱动作为Java程序和数据库的桥梁,将JDBC接口方法转换为对应数据库的SQL语句。接着获取Connection连接对象,然后创建Statement对象执行SQL语句,最后用ResultSet接收执行结果。
    • 代码实现步骤
      • 加载驱动:将数据库驱动(如MySQL驱动mysql - connector - java)导入工程。在普通Java工程中,先在根目录创建lib文件夹放入驱动包,再通过File - Project Structure - Libraries添加驱动包到系统。
      • 连接数据库:通过DriverManager.getConnection(url, username, password)方法获取Connection对象,其中url指定数据库位置(如jdbc:mysql://localhost:3306/mytest1),usernamepassword为数据库的用户名和密码。连接过程中可能出现数据库名称错误(抛Unknown database异常)、用户名或密码错误(抛using password. Yes相关异常)、未导入驱动(抛相应异常)等问题 。
      • 执行操作
        • 增删改操作:使用StatementexecuteUpdate方法执行SQL的增删改语句。如添加数据时,可直接将参数写在SQL语句中,也可用占位符?代替,执行前通过setXxx方法(如setStringsetInt等)根据参数类型替换占位符。executeUpdate方法返回值为影响的行数,返回1表示操作成功 。
        • 查询操作:使用StatementexecuteQuery方法执行查询SQL语句,该方法返回ResultSet结果集。通过ResultSetnext方法判断结果集是否有数据,若有则可用getXxx方法(如getIntgetString)根据列名或列下标获取数据 。

JavaWeb26-2:查询结果处理、事务处理、数据库连接池以及dbUtils工具的使用与原理

  1. JDBC查询结果处理:当查询多条数据时,不能仅用if语句判断,需使用while循环遍历ResultSet结果集,确保获取所有数据。例如查询person表所有数据时,while (resultSet.next())可逐行获取数据,避免只取到第一条数据的情况。
  2. JDBC事务处理:以张三和李四转账为例,在JDBC中处理事务时,先关闭connection的自动提交(connection.setAutoCommit(false)),执行多条SQL语句(如修改两人账户金额)。若执行过程中无异常,则手动提交事务(connection.commit());若出现异常(如人为制造10/0错误),则在catch块中进行回滚(connection.rollback()),确保数据一致性,避免数据错误。
  3. 数据库连接池(以c3p0为例)
    • 概念与作用:数据库连接池旨在解决每次向数据库申请连接、验证用户名密码后又丢弃连接导致的资源浪费问题。它基于池化思想,预先创建多个连接对象,供程序重复使用,提高资源利用率,类似线程池和字符串常量池。
    • 使用方法:使用c3p0连接池时,先导入其相关jar包。在代码中创建ComboPooledDataSource对象,设置驱动(setDriverClass)、urlsetJdbcUrl)、用户名(setUser)、密码(setPassword)等基本参数,还可设置初始化连接数(如setInitialPoolSize)、最大连接数(setMaxPoolSize)、最小连接数(用于补充连接,setMinPoolSize)和每次增加的连接数(setAcquireIncrement)。通过dataSource.getConnection()获取连接对象,后续操作与普通JDBC操作类似 。
  4. dbUtils工具
    • 工具作用dbUtils是对JDBC的封装,可简化数据查询和封装过程。使用原生JDBC查询数据时,需手动解析结果集并拼接成Java对象,步骤繁琐,而dbUtils工具可自动进行数据封装。
    • 使用方法:先导入dbUtils相关jar包。使用时,创建QueryRunner对象,调用其query方法。传入连接对象、SQL语句、用于接收结果的类型(如BeanHandlerBeanListHandler,取决于查询一条还是多条数据)以及查询参数(若有)。例如查询person表中ID为1的数据,可创建person类接收结果,调用query方法返回person对象;查询全部数据时,使用BeanListHandler返回包含多个person对象的集合 。
    • 实现原理query方法首先对传入的连接对象、SQL语句和结果处理对象进行非空校验。接着利用JDBC创建PreparedStatement对象、填充参数、执行查询并获取ResultSet结果集。关键在于将ResultSet解析并封装成Java对象,这由传入的结果处理对象(如BeanHandler)完成。BeanHandler通过反射机制,根据Java类的属性和结果集的列名进行匹配赋值,将结果集数据填充到Java对象中。若列名不匹配(如修改person类中字段名),则对应字段无法赋值 。

JavaWeb27-1:手写dbUtils的工具类

阐述了工具类的设计思路、实现过程和关键代码逻辑

  1. 分析dbUtils工具实现流程dbUtils工具通过定义QueryRunner类的query方法进行查询操作。该方法接收连接对象、SQL语句、处理器(用于将ResultSet转换为Java对象)和SQL语句参数这四个参数。在方法内部,先对前三个参数进行非空校验,然后使用JDBC进行SQL查询,填充参数获取结果集,最后调用处理器的handle方法将结果集解析为对应的Java对象并返回 。
  2. 手写工具类实现过程
    • 定义类和方法:创建MicroRunner类并定义query方法,query方法使用泛型T,其返回类型由传入的泛型决定。方法接收Connection对象、SQL语句、ResultSetHandler<T>处理器和可变参数Object... params
    • 参数非空校验:对Connection对象、SQL语句和处理器进行非空校验,若为空则抛出自定义异常MyException,继承自RuntimeException
    • 使用JDBC查询并处理参数:通过Connection对象获取PreparedStatement对象。根据传入的可变参数数组长度,循环遍历数组,判断每个参数的类型,使用相应的setXxx方法(如setIntsetString)将参数值设置到PreparedStatement中。处理完参数后,执行executeQuery方法获取结果集ResultSet
    • 将结果集转换为Java对象:定义MyBeanHandler<T>类实现ResultSetHandler<T>接口,在handle方法中通过反射机制实现结果集到Java对象的转换。首先在构造函数中接收一个Class<T>类型的参数type,用于确定要返回的Java对象类型。在handle方法中,使用type.newInstance()创建该类型的对象t 。然后遍历结果集,根据结果集的列名和Java对象的属性名进行匹配赋值,将结果集中的数据填充到Java对象中。
    • 测试与验证:编写测试代码,创建连接对象、SQL语句并调用MicroRunnerquery方法,传入相应参数。通过断点调试,逐步验证参数替换、结果集获取以及结果集转换为Java对象的过程是否正确,确保工具类的功能符合预期 。

JavaWeb27-2:手写类似dbUtils工具类数据填充、结果集为空处理、查询多条数据的实现以及工具类通用性测试

  1. 数据填充与匹配:通过反射机制获取实体类的属性(type.getDeclaredFields)和结果集的字段(resultSet.getMetaData)。对两者进行循环嵌套遍历,对比属性名和字段名,若匹配则根据字段类型从结果集中取值(使用resultSet.getXXX方法,如getIntgetString )。将取到的值赋给实体类的对应属性,通过拼接属性名生成set方法名(属性首字母大写加set前缀 ),再利用反射获取set方法(type.getDeclaredMethod)并调用,完成数据填充。在这个过程中,需要注意resultSet.next()方法只能调用一次,否则会导致数据获取错误,经过多次调整if (resultSet.next())的位置,最终确保能正确获取并填充所有字段的值。
  2. 处理结果集为空情况:参考原工具类的写法,在获取结果集后,增加判断if (resultSet.next() == false),若结果集为空则直接return null,避免返回属性为空的对象。若结果集有数据,则正常解析数据。这样完善了工具类对不同查询结果的处理逻辑。
  3. 查询多条数据的实现:当查询多条数据时,原BeanHandler只能解析单个数据,因此定义新的MyBeanListHandler类实现ResultSetHandler接口来处理集合数据。在MyBeanListHandlerhandle方法中,创建一个ArrayList集合用于存储解析后的对象。通过while (resultSet.next())循环,每次循环创建一个新的对象(使用type.newInstance() ),并复用之前单条数据解析时的数据填充代码,将结果集中的数据填充到新对象中,再将对象添加到集合中,最后返回该集合。
  4. 工具类通用性测试:对编写的工具类进行多种情况的测试,包括查询单条数据、多条数据以及查询不存在的数据等情况。同时,更换不同的表(如student表)进行测试,创建对应的实体类(包含与表字段对应的属性及gettersetter方法和toString方法 ),验证工具类的通用性。测试结果表明,该工具类能够正确处理不同表的单条和多条数据查询,以及对不存在数据的查询(返回null ),具备了基本的功能。
关键字:汕头百度seo电话_宁夏住房和城乡建设官网_不付费免费网站_收录优美图片app

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: