基于 MySQL 的 JDBC 完整查询流程演示

张开发
2026/4/17 13:27:30 15 分钟阅读

分享文章

基于 MySQL 的 JDBC 完整查询流程演示
1. JSP 动作标签jsp:useBean作用在指定作用域中实例化 / 查找 JavaBean 对象若对象不存在则自动创建。语法jsp:useBean id对象名 class类全限定名 scope作用域/参数说明idJavaBean 的唯一标识用于后续 EL 表达式引用class要实例化的类支持java.util.HashMap等普通类scope对象的作用域可选page/request/session/application默认page本代码场景idproduct实例化了request作用域的HashMap对象用于存储商品数据。2. JSTL 核心标签c:set作用为 JavaBean/Map 设置属性值或定义变量。语法c:set target对象 property属性名 value值/参数说明target要操作的对象支持 JavaBean、Mapproperty属性名Map 对应 keyJavaBean 对应 setter 方法value要设置的值本代码场景给productHashMap的jgkey 赋值99.9对应商品价格。3. EL 表达式${}作用简化 JSP 中对象数据的获取替代传统% %脚本。Map 取值规则支持点语法${map.key}仅当 key 为合法标识符时生效支持方括号语法${map[key]}通用写法支持特殊字符 key本代码问题${product.spid}等表达式因HashMap未提前设置对应 key直接返回null最终显示空值。4. JSTL 标签c:out作用安全输出 EL 表达式的值支持默认值兜底。语法c:out value${表达式} default默认值/优势当 EL 表达式为null时不会显示空白而是展示default指定的默认值提升页面友好度。本代码场景给商品 ID、名称、数量、价格设置了默认值避免空数据展示。5. Maven 依赖配置JSTL 环境搭建运行步骤刷新 Maven 依赖打开pom.xml点击右侧 Maven 面板的Reload All Maven Projects确保依赖下载完成。配置 Tomcat打开Run - Edit Configurations添加Tomcat Server - Local选择 Tomcat 9.0.15 安装目录Deployment标签页添加myxmall:war exploded应用并保存配置启动项目点击右上角绿色运行按钮启动 Tomcat访问页面浏览器输入http://localhost:8080/myxmall/javabean/spBean.jspJSTL 核心标签c:out作用安全输出 EL 表达式的值支持默认值、HTML 转义控制。核心属性value要输出的 EL 表达式 / 常量default当value为null时显示的默认值escapeXml是否转义 HTML 特殊字符true为默认false不转义可渲染 HTML第一个标签输出num变量的值15第二个标签输出username变量的值admin若变量为空则显示标签体中的root。JSP 四大作用域page仅当前页面有效request一次请求有效转发共享重定向失效session一次会话有效浏览器关闭前共享application整个项目全局有效本代码场景session.setAttribute(myUser,myUser)将MyUser对象存入session整个会话期间都可访问。EL 表达式${}作用简化对象 / 变量的获取自动从四大作用域按顺序查找page → request → session → application。本代码场景${myUser}会自动从session中获取MyUser对象${myUser.username}会调用对象的getUsername()方法取值。运行步骤刷新 Maven 依赖打开pom.xml点击右侧 Maven 面板的Reload All Maven Projects确保依赖下载完成。配置 Tomcat打开Run - Edit Configurations添加Tomcat Server - Local选择 Tomcat 9.0.115 安装目录Deployment标签页添加myxmall:war exploded应用并保存配置启动项目点击右上角绿色运行按钮启动 Tomcat核心语法与属性用法语法作用本代码示例1. 定义普通变量value 赋值c:set var变量名 value值 scope作用域/在指定作用域创建变量c:set varusername1 scopesession valuezhangsan/2. 定义普通变量标签体赋值c:set var变量名 scope作用域标签体/c:set多行内容赋值给变量c:set varusername2 scopesessionlisi/c:set3. 为 JavaBean 设置属性value 赋值c:set target${对象} property属性名 value值/调用对象setter方法c:set target${myUser} propertyusername value张三/4. 为 JavaBean 设置属性标签体赋值c:set target${对象} property属性名标签体/c:set多行内容作为属性值c:set target${myUser} propertyusernamewangwu/c:set1.c:set操作 Map 示例除了 JavaBeanc:set还可以直接操作HashMap2.c:out防 XSS 原理默认escapeXmltrue会将script转义为lt;scriptgt;避免恶意脚本执行。仅在输出可信内容时才设置escapeXmlfalse渲染 HTML。3. 作用域优先级与强制指定EL 自动按page → request → session → application查找若同名变量会取靠前的。可通过${sessionScope.username1}强制指定从session取值避免冲突。运行步骤刷新 Maven 依赖 → 配置 Tomcat → 启动服务 → 访问1. JSTL 核心标签c:set作用在指定作用域中创建 / 修改变量或为 JavaBean/Map 设置属性。vartest定义变量名testvalue我是一个测试数据给变量赋值省略scope时默认作用域为page仅当前页面有效2. JSTL 核心标签c:out作用安全输出 EL 表达式的值支持默认值、HTML 转义。输出变量test的值若变量为null则默认显示空白可通过default属性设置兜底值3. JSTL 核心标签c:remove作用从指定作用域中移除变量释放内存。语法c:remove var变量名 [scope作用域]/var要移除的变量名必填scope可选指定作用域page/request/session/application不指定则从所有作用域移除移除变量test移除后${test}取值为null4. JSTL 核心标签c:catch作用捕获 JSP 脚本 / EL 表达式中的异常避免页面直接报错 500提升页面健壮性。语法c:catch var异常变量名可能抛出异常的代码/c:catchvar存储异常对象的变量名必填异常信息可通过${异常变量名.message}等方式获取捕获1/0产生的算术异常ArithmeticException并将异常对象存入exceptionInfo变量页面不会崩溃可通过c:out value${exceptionInfo}/输出异常信息5. EL 表达式${}与 JSP 脚本% %EL 表达式${}简化数据获取自动从四大作用域按顺序查找变量支持运算、空值处理JSP 脚本% %嵌入原生 Java 代码本代码中%int i1/0;%用于触发异常演示c:catch用法运行流程逐行执行逻辑执行c:set创建page作用域的变量test值为我是一个测试数据执行第一个c:out从page作用域获取test输出我是一个测试数据执行c:remove从所有作用域移除变量test执行第二个c:outtest已被移除取值为null输出默认值无默认则显示空白执行c:catch执行内部脚本%int i1/0;%触发ArithmeticException异常c:catch捕获异常将异常对象存入exceptionInfo变量页面不会崩溃执行异常信息输出通过 EL 表达式获取exceptionInfo的属性输出异常详情1. JSTL 条件标签总览JSTL 核心标签库提供两类条件标签用于替代 JSP 脚本中的if/else if/else逻辑让页面代码更简洁、易维护标签作用对应 Java 语法c:if单分支条件判断if(...)c:choosec:whenc:otherwise多分支条件判断if(...){} else if(...){} else{}2.c:if单分支条件标签3.c:choose多分支条件标签test必填EL 表达式结果为true/false决定是否执行标签体内容var可选将test的布尔结果存入指定变量供后续使用scope可选指定var变量的作用域page/request/session/application默认page逻辑判断sex变量是否为1条件成立则输出「男孩」并将结果true存入result变量注意c:if没有else分支多分支需用c:choosec:choose容器标签仅包含c:when和c:otherwise无属性c:when条件分支等价于else if必须放在c:otherwise之前c:otherwise默认分支等价于else最多只能有 1 个可省略逻辑按顺序判断成绩区间匹配第一个成立的条件后直接跳出整个c:choose后续分支不再执行关键EL 表达式中不能使用以外的逻辑与如、and部分版本不兼容必须用4. 配套基础知识点1c:set标签var变量名value变量值scope作用域session表示会话级共享2EL 表达式${}支持关系运算/!////支持逻辑运算与、||或、!非自动从四大作用域按顺序查找变量page → request → session → application3JSP 页面基础配置isELIgnoredfalse强制开启 EL 表达式解析Tomcat 9 默认开启显式声明更安全taglib指令引入 JSTL 核心标签库所有c:xxx标签必须依赖此声明运行流程第一部分c:if执行流程执行c:set在session作用域创建变量sex1执行第一个c:if判断${sex1}→true执行标签体输出「男孩」并将true存入result输出${result}→ 显示true执行第二个c:if判断${sex0}→false不执行标签体将false存入result2输出${result2}→ 显示false第二部分c:choose执行流程执行c:set在session作用域创建变量grade80进入c:choose按顺序判断c:when条件条件 1${grade90}→8090为false跳过条件 2${grade80 grade90}→8080 8090为true执行标签体输出「良好」后续c:when全部跳过直接跳出c:choose最终输出等级「良好」1. JSP 脚本片段% %作用在 JSP 页面中嵌入原生 Java 代码编译后会被放入_jspService()方法执行。实例化MyUser对象循环构造 5 条用户数据将数据存入ArrayList集合再把集合存入session作用域供 JSTL 标签遍历注意代码中setUserPwd方法名与MyUser类的getter/setter不匹配会导致 IDE 报错需修正为setPassword等规范命名2. JSTL 核心标签c:forEachc:forEach是 JSTL 最常用的循环标签完全替代 JSP 脚本中的for循环支持两种核心用法1简单数值循环类似 Javafor(int ibegin; iend; istep)核心属性begin循环起始值必填end循环结束值必填step步长可选默认1即每次 1效果循环 5 次输出 5 行Hello,world!2集合遍历遍历 List/Map/ 数组等属性作用说明var循环变量名每次循环将集合中的元素存入该变量供 EL 表达式使用items要遍历的集合通常为 EL 表达式如${userList}从作用域获取集合varStatus循环状态对象存储循环的索引、计数等信息常用属性count当前循环次数从 1 开始index当前元素索引从 0 开始first是否为第一个元素last是否为最后一个元素3. EL 表达式${}与 JavaBean 规范JavaBean 要求MyUser类必须提供无参构造方法对应属性的getter/setter方法如username对应getUsername()/setUsername()EL 表达式${user.username}会自动调用getUsername()取值。本代码问题setUserPwd方法名不规范正确命名应为setPassword对应属性passwordEL 表达式${user.password}才能正常取值。运行流程逐行执行逻辑执行 JSP 脚本循环构造 5 个MyUser对象存入ArrayList再将集合存入session作用域执行简单数值循环begin1到end5步长1循环 5 次输出 5 行Hello,world!执行集合遍历从session获取userList集合循环遍历集合每次将元素存入varuser变量通过varStatusstatus获取循环状态输出序号、用户名、密码等信息循环结束页面渲染完成属性作用示例count循环次数从 1 开始第 1 次循环为 1第 2 次为 2...index元素索引从 0 开始第 1 个元素为 0第 2 个为 1...first是否为第一个元素第 1 个元素为 true其余为 falselast是否为最后一个元素最后一个元素为 true其余为 falsecurrent当前遍历的元素等价于var指定的变量一、核心知识点详解这是一套完整的Java Web MVC 分层演示涵盖JavaBean 实体类、Servlet 控制器、JSP 视图层 JSTL 标签三大核心模块是 Java Web 开发的经典基础架构。1. JavaBean 实体类Person.java核心定义JavaBean 是符合特定规范的 Java 类用于封装业务数据是 MVC 架构中的Model模型层。必须满足的规范私有属性所有成员变量用private修饰禁止直接访问无参构造方法必须提供public Person()供反射实例化JSP/Servlet 依赖getter/setter 方法为每个属性提供getXxx()/setXxx()用于 EL 表达式取值 / 赋值可序列化可选实现Serializable接口用于对象跨网络 / 持久化传输2. Servlet 控制器PersonServlet.java核心定义Servlet 是运行在服务器端的 Java 程序是 MVC 架构中的Controller控制层负责接收浏览器请求处理业务逻辑构造数据、调用业务层将数据存入请求作用域转发到 JSP 页面渲染核心注解与方法元素作用WebServlet(/Per)配置 Servlet 访问路径浏览器通过http://localhost:8080/项目名/Per访问doGet()处理 GET 请求本代码用于处理页面访问请求request.setAttribute()将数据存入request作用域供 JSP 页面通过 EL 表达式获取request.getRequestDispatcher().forward()请求转发将请求 / 响应对象转发到 JSP 页面数据共享3. JSP 视图层 JSTL 标签PersonBean.jsp核心定义JSP 是 MVC 架构中的View视图层负责将 Servlet 传递的数据渲染成 HTML 页面供浏览器展示。核心标签与指令isELIgnoredfalse强制开启 EL 表达式解析Tomcat 9 默认开启显式声明更安全taglib指令引入 JSTL 核心标签库所有c:xxx标签必须依赖此声明2c:forEach循环标签用于遍历集合完全替代 JSP 脚本中的for循环核心属性属性作用var循环变量名每次循环将集合元素存入该变量items要遍历的集合通常为 EL 表达式${personList}从 request 作用域获取varStatus循环状态对象可获取序号、索引等信息本代码未使用3EL 表达式${}自动从四大作用域按顺序查找变量page → request → session → application${person.id}等价于person.getId()依赖 Person 类的getId()方法自动处理空值避免NullPointerException遍历 Servlet 传递的personList集合循环输出每个 Person 对象的属性每个对象的信息用br/换行实现列表展示逐步骤执行逻辑浏览器发起请求用户访问http://localhost:8080/myxmall/PerTomcat 匹配 Servlet根据WebServlet(/Per)找到PersonServletServlet 处理请求执行doGet()方法构造 5 个Person对象存入ArrayList调用req.setAttribute(personList, xx)将集合存入request作用域调用forward()方法将请求转发到/javabean11/PersonBean.jspJSP 页面渲染执行c:forEach标签从request作用域获取personList集合循环遍历集合通过 EL 表达式${person.xxx}读取每个对象的属性生成 HTML 代码返回给浏览器浏览器展示结果页面显示 5 条用户信息包含学号、姓名、年龄、身高、电话一、核心知识点详解这是一段基于JDBC (Java Database Connectivity)的原生数据库连接测试代码使用JUnit框架进行单元测试是 Java 操作数据库的最底层核心逻辑。1. JDBC 核心流程JDBC 是 Java 提供的一套用于执行 SQL 语句的 API其标准流程为加载驱动 → 获取连接 → 执行 SQL → 关闭资源。1加载数据库驱动作用将 MySQL 的驱动类加载到内存注册到DriverManager。原理反射机制。版本说明MySQL 5.x驱动类为com.mysql.jdbc.Driver。MySQL 8.x驱动类为com.mysql.cj.jdbc.Driver推荐使用截图中未带cj虽能运行但已过时建议补上。2获取数据库连接URL 参数详解jdbc:mysql://协议子协议。localhost:3306数据库地址和端口。mall要连接的数据库名。serverTimezoneGMT%2B8指定时区为东八区北京时间解决时间戳报错。useSSLfalse关闭 SSL 连接提高性能。3关闭连接必须执行关闭操作释放数据库连接资源数据库连接数有限需即时释放。2. JUnit 单元测试Test注解标识该方法为测试方法可独立运行。运行优势无需启动 Tomcat 或 main 方法可直接测试底层逻辑如数据库连接、DAO 层方法快速验证功能是否正常。测试结果控制台输出数据库链接正常且测试工具显示Tests passed: 1证明连接成功。3. 异常处理机制捕获异常捕获ClassNotFoundException驱动找不到、SQLException连接超时 / 密码错误等异常。容错处理打印失败信息和堆栈跟踪便于调试。完整运行流程1. 执行逻辑初始化测试环境IDEA 运行Uint51类的test方法启动 JUnit 测试。加载驱动执行Class.forName()在类路径中查找 MySQL 驱动包mysql-connector-java。建立连接根据 URL 地址尝试连接本地 3306 端口的 MySQL 服务。验证用户名root和密码root是否正确。握手成功创建连接对象Connection。输出日志控制台打印数据库链接正常。释放资源执行con.close()关闭连接测试方法执行结束。1.DBUtils.java数据库连接工具类核心作用封装 JDBC 重复代码加载驱动、获取连接、关闭资源提供全局统一的数据库访问入口解耦连接逻辑与业务逻辑。2.UserDao.java数据访问层 DAO核心作用DAOData Access Object是专门负责与数据库交互的层负责执行 SQL 语句并将结果集映射为 Java 对象User。3.User.java实体类 Entity核心作用对应数据库中的user表是MVC 架构中的模型层Model用于封装单条数据记录。必须满足的规范私有属性与数据库表字段一一对应id,name,password,email,birthday。无参构造反射实例化必需。Getter/SetterEL/DAO 反射取值必需。toString()便于控制台打印查看数据截图运行结果依赖此方法。4. JDBC 核心流程标准流程步骤操作类 / 对象作用1获取连接DriverManager/DBUtils建立与数据库的通信通道2创建执行对象Statement/PreparedStatement用于发送 SQL 语句到数据库3执行 SQLexecuteQuery()执行查询返回ResultSet结果集4解析结果ResultSet将数据库字段取出封装为 Java 对象5释放资源DBUtils.close()释放内存防止连接泄漏逐行执行逻辑测试启动运行Uint52的测试方法触发UserDao.getAll()。获取连接UserDao调用DBUtils.getConnection()加载 MySQL 驱动并通过 URL / 账号密码连接本地mall数据库。执行查询创建Statement对象执行select * from user数据库返回结果集rs。数据封装rs.next()游标移动到下一行首次执行指向第一行。循环遍历依次取出id、name、birthday等字段设置到User对象中。将User对象加入users集合。资源释放在finally块中调用DBUtils.close()依次关闭ResultSet、Statement、Connection。结果返回getAll()返回装有 5 条用户信息的ArrayList控制台打印输出。

更多文章