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

Javaweb小练习---在JSP中使用Javabean访问数据库完成用户信息的简单添加

Javaweb小练习---在JSP中使用Javabean访问数据库完成用户信息的简单添加


目录

Javaweb小练习---在JSP中使用Javabean访问数据库完成用户信息的简单添加

0.创建数据库

1.

在resources目录下创建db.properties文件

2.

/**

* 获取链接与释放资源的工具类--JdbcUtil类

*/

3.

/*** 实体类---建立该类实现记录信息对象化*/

4.在User类基础上,建立UserDao类,封装基本的数据库操作

5.创建数据提交页面----a.jsp

6.计算加工页面-----b.jsp

7.显示信息页面-----c.jsp

8.项目结构:


0.创建数据库

-- 创建数据库test

-- 创建数据库test
CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;-- 切换到test数据库
USE test;-- 创建数据表user
CREATE TABLE IF NOT EXISTS user (userid VARCHAR(10) PRIMARY KEY,username VARCHAR(20) NOT NULL,sex VARCHAR(10) NOT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;SELECT *FROM user

 

 

1.

在resources目录下创建db.properties文件

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=123456

2.

/**

* 获取链接与释放资源的工具类--JdbcUtil类

*/

package jdbc;import java.io.InputStream;
import java.sql.*;
import java.util.Properties;/*** 获取链接与释放资源的工具类--JdbcUtil类*/
public class JdbcUtil{private static String driver;private static String url;private static String username;private static String password;private static Properties properties = new Properties();public JdbcUtil() {}static  {try {//设计该工具类的静态初始化器中的代码,该代码在装入类时执行,且执行一次//加载属性文件,并在JdbcUtil雷中可读取其中的属性值properties.load(JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"));driver = properties.getProperty("driver");url = properties.getProperty("url");username = properties.getProperty("username");password = properties.getProperty("password");Class.forName(driver);}catch (Exception e){//throw new ExceptionInInitializerError(e);System.out.println(e);}}//设计获得连接对象的方法getConnection()public static Connection getConnection() throws Exception{Connection connection=null;try{//1-读取db.properties文件Properties properties = new Properties();InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");properties.load(in);//2-读取属性String driver=properties.getProperty("driver");String url=properties.getProperty("url");String username=properties.getProperty("username");String password=properties.getProperty("password");//3-注册驱动Class.forName(driver);//4-获取连接connection= DriverManager.getConnection(url,username,password);//5-日志打印连接信息System.out.println("连接信息: " + url + " " + username + " " + password);} catch (Exception e) {e.printStackTrace();throw new RuntimeException("数据库连接失败,请检查连接参数是否正确!");}return connection;}//设计释放结果集、语句和连接方法free()public static void free(ResultSet resultSet, Statement statement,Connection connection)throws Exception{if (resultSet!=null){resultSet.close();}if (statement!=null){statement.close();}if (connection!=null){connection.close();}}
}

3.

/**
* 实体类---建立该类实现记录信息对象化
*/

package vo;/*** 实体类---建立该类实现记录信息对象化*/
public class User {private String userid;private String username;private String sex;public User() {}public User(String userid, String username, String sex) {this.userid = userid;this.username = username;this.sex = sex;}public String getUserid() {return userid;}public void setUserid(String userid) {this.userid = userid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}
}

4.在User类基础上,建立UserDao类,封装基本的数据库操作

package dao;import jdbc.JdbcUtil;
import vo.User;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;/*** 在User类基础上,建立UserDao类,封装基本的数据库操作*/
public class UserDao {//1-向数据库中添加用户的方法add(User user),将对象user插入数据表中public void add(User user)throws Exception{Connection connection= JdbcUtil.getConnection();String sql="insert into user(userid,username,sex) values(?,?,?)";PreparedStatement preparedStatement=connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);preparedStatement.setString(1,user.getUserid());preparedStatement.setString(2,user.getUsername());preparedStatement.setString(3,user.getSex());preparedStatement.executeUpdate();JdbcUtil.free(null,preparedStatement,connection);}//2-修改数据库用户记录方法update(User user),将对象user进行修改public void update(User user)throws Exception{Connection connection= JdbcUtil.getConnection();String sql="update user set username=?,sex=? where userid=?";PreparedStatement preparedStatement=connection.prepareStatement(sql);preparedStatement.setString(1,user.getUsername());preparedStatement.setString(2,user.getSex());preparedStatement.setString(3,user.getUserid());preparedStatement.executeUpdate();JdbcUtil.free(null,preparedStatement,connection);}//3-删除数据库用户记录方法delete(String userId),根据userId值进行删除记录public void delete(String userId)throws Exception{Connection connection=JdbcUtil.getConnection();String sql="delete from user where userid=?";PreparedStatement preparedStatement=connection.prepareStatement(sql);preparedStatement.setString(1,userId);preparedStatement.executeUpdate();JdbcUtil.free(null,preparedStatement,connection);}//4-根据id查询用户方法findUserById()public User findUserById(String userId)throws Exception{Connection connection=JdbcUtil.getConnection();User user=null;String sql="select * from user where userid=?";PreparedStatement preparedStatement=connection.prepareStatement(sql);preparedStatement.setString(1,userId);ResultSet resultSet=preparedStatement.executeQuery();if (resultSet.next()){user=new User();user.setUserid(resultSet.getString("userid"));user.setUsername(resultSet.getString("username"));user.setSex(resultSet.getString("sex"));}JdbcUtil.free(resultSet,preparedStatement,connection);return user;}//5-查询全部用户的方法QueryAll()public List<User>QueryAll()throws Exception{Connection connection=JdbcUtil.getConnection();List<User> userList=new ArrayList<>();String sql="select * from user";PreparedStatement preparedStatement=connection.prepareStatement(sql);ResultSet resultSet=preparedStatement.executeQuery();while (resultSet.next()){User user=new User();user.setUserid(resultSet.getString("userid"));user.setUsername(resultSet.getString("username"));user.setSex(resultSet.getString("sex"));userList.add(user);}JdbcUtil.free(resultSet,preparedStatement,connection);return userList;}
}

5.创建数据提交页面----a.jsp

<%--Created by IntelliJ IDEA.User: CaptainDongDate: 2023/4/9Time: 11:59To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>数据提交页面</title>
</head>
<body>
<form action="b.jsp" method="post"><table><tr><td>编号:</td><td><input type="text" name="userid" required></td></tr><tr><td>姓名:</td><td><input type="text" name="username" required></td></tr><tr><td>性别:</td><td><input type="text" name="sex" required></td></tr><tr><td colspan="2"><button type="submit">提交</button><button type="reset">重置</button></td></tr></table>
</form>
</body>
</html>

6.计算加工页面-----b.jsp

<%@ page import="vo.User" %>
<%@ page import="dao.UserDao" %>
<%@ page import="java.util.List" %>
<%@ page import="java.sql.SQLException" %><%--Created by IntelliJ IDEA.User: CaptainDongDate: 2023/4/9Time: 11:59To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>计算加工页面</title>
</head>
<body>
<%request.setCharacterEncoding("UTF-8");String user_id=request.getParameter("userid");String user_name=request.getParameter("username");String user_sex=request.getParameter("sex");User user=new User(user_id,user_name,user_sex);UserDao userDao=new UserDao();//userDao.add(user);// 实现插入try {userDao.add(user);} catch (SQLException e) {e.printStackTrace();}List<User>users=userDao.QueryAll();request.setAttribute("users_list",users);
%>
//转到c.jsp网页
<jsp:forward page="c.jsp"></jsp:forward>
</body>
</html>

7.显示信息页面-----c.jsp

<%@ page import="java.util.List" %>
<%@ page import="vo.User" %><%--Created by IntelliJ IDEA.User: CaptainDongDate: 2023/4/9Time: 11:59To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>显示信息页面</title>
</head>
<body>
<%List<User>users=(List<User>) (request.getAttribute("users_list"));for (int i=0;i<users.size();i++){User user=users.get(i);String abc="编号:"+user.getUserid()+"_姓名:"+user.getUsername()+"_性别:"+user.getSex();out.println(abc);}
%>
</body>
</html>

8.项目结构:

 

 

相关文章:

Javaweb小练习---在JSP中使用Javabean访问数据库完成用户信息的简单添加

Javaweb小练习---在JSP中使用Javabean访问数据库完成用户信息的简单添加 目录 Javaweb小练习---在JSP中使用Javabean访问数据库完成用户信息的简单添加 0.创建数据库 1. 在resources目录下创建db.properties文件 2. /** * 获取链接与释放资源的工具类--JdbcUtil类 */ 3…...

(十七)排序算法-基数排序

1 基本介绍 1.1 概述 &#xff08;1&#xff09;基数排序&#xff08;radix sort&#xff09;属于“分配式排序”&#xff0c;顾名思义&#xff0c;它是通过键值的各个位的值&#xff0c;将要排序的元素分配至某些“桶”中&#xff0c;达到排序的作用。 &#xff08;2&#x…...

JMM之先行发生原则(happens-before)详解

1、概述 在JMM规范下&#xff0c;如果一个操作执行的结果需要对另一个操作可见&#xff0c;那么这两个操作之间必须存在happers-before(先行发生)原则。 例如 int x 10 ; int y x; 这两行代码中第二个操作 yx &#xff0c;因为需要将x值赋值给y&#xff0c;所以第一行代码的…...

含分布式电源的配电网可靠性评估研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

安全加固服务是什么?哪些行业需要做?

安全加固服务是什么&#xff1f;安全加固服务是一种针对企业信息系统、网络设备、应用程序等进行安全加固和优化的服务。安全加固服务的主要目的是保障企业信息系统的安全性和稳定性&#xff0c;有效防范各类网络攻击和安全威胁。 安全加固服务是什么&#xff1f;通常包括以下…...

好程序员:Java书籍推荐,程序员必看的5本Java书籍,赶紧收藏!

今天好程序员给大家推荐5本Java书籍&#xff0c;各大高校都在使用&#xff08;具体名单如下&#xff09;&#xff0c;所有学习Java的程序员都不应该错过&#xff01; 第一本Java书籍《Java EE&#xff08;SSM框架&#xff09;企业应用实战》 本书全面介绍了JavaEE中MyBatis、Sp…...

maven将jar包添加到本地仓库

第一步&#xff1a;下载需要添加的jar包 可以在maven库中查找下载&#xff0c;也可以在对应官网下载 maven库网址&#xff1a;https://mvnrepository.com/ 找到对应版本的jar包下载 第二步&#xff1a;将下载的jar包放到指定位置&#xff08;位置自己指定&#xff09;&#xf…...

4.12--计算机网络之TCP篇之TCP 协议的缺陷+如何基于 UDP 协议实现可靠传输?--(复习+大总结)---沉下心来(加油呀)

TCP 协议四个方面的缺陷&#xff1a; 1.升级 TCP 的工作很困难&#xff1b; TCP 协议是在内核中实现的&#xff0c;应用程序只能使用不能修改&#xff0c;如果要想升级 TCP 协议&#xff0c;那么只能升级内核。 而升级内核这个工作是很麻烦的事情 2.TCP 建立连接的延迟&#x…...

数据库网络编程

数据库网络编程是一个重要的领域&#xff0c;它涉及到如何使用编程语言与数据库进行交互&#xff0c;以及如何设计和实现网络应用程序。在这篇文章中&#xff0c;我将探讨数据库网络编程的基础知识、常用技术和实践经验&#xff0c;以及一些应用案例和未来发展趋势。 一、基础…...

为什么现代企业都在使用ERP系统 它有哪些优势

随着科技的不断发展&#xff0c;企业管理方式也在不断地发生改变。在这个信息化的时代&#xff0c;企业要想取得成功&#xff0c;必须要善于利用先进的信息化技术工具。其中&#xff0c;ERP系统是企业管理中不可或缺的重要工具。本文将探讨现代企业为什么会使用ERP系统&#xf…...

别再用 BeanUtils 了,这款 PO VO DTO 转换神器不香么?

老铁们是不是经常为写一些实体转换的原始代码感到头疼&#xff0c;尤其是实体字段特别多的时候。介绍一个开源项目 mapstruct &#xff0c;可以轻松优雅的进行转换&#xff0c;简化你的代码。当然有的人喜欢写get set&#xff0c;或者用BeanUtils 进行复制&#xff0c;代码只是…...

LeetCode算法小抄-- 最近公共祖先 和 完全二叉树的节点个数

LeetCode算法小抄-- 最近公共祖先 和 完全二叉树的节点个数 最近公共祖先[236. 二叉树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/)[235. 二叉搜索树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-b…...

php、redis实现分布式锁的正确写法(原子操作 通用类 加讲解)

最终代码(通用类) 1 面试中、实际工作中&#xff0c;经常涉及到 redis 分布式锁&#xff0c;正确写法如下。先奉上代码&#xff0c;再讲解。 <?php namespace app\common\library; /*** 通用分布式锁(原子操作)*/ class Lock {/*** 获取redis实例* return \Redis* throws…...

Transformer在时序预测的应⽤第一弹——Autoformer

Transformer在时序预测的应⽤第一弹——Autoformer 原文地址&#xff1a;Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting&#xff08;NIPS 2021&#xff09; 做长时间序列的预测 Decomposition把时间序列做拆分&#xff0c…...

文章改写神器在线-AI续写文章生成器

AI续写生成器 AI续写生成器是一种利用人工智能技术的创意工具&#xff0c;能够提高写作效率&#xff0c;为营销推广带来全新的可能性。无论你是写手、广告人员还是市场营销人员&#xff0c;这个工具都能够有效地解决你在写作中遇到的难题。 在内容创作行业中&#xff0c;原创…...

一秒钟给硬盘文件做个树状结构目录

一秒钟给硬盘文件做个树状结构目录 一、背景 对于长时间坐在电脑前的打工人来说&#xff0c;若没有养成良好文件分类习惯的话&#xff0c;年终整理电脑文件绝对是件头疼的事情。 给磁盘文件做个目录&#xff0c;一目了然文件都在哪里&#xff1f;想想都是件头疼的事情。 对于…...

电脑重装系统后会怎样?

​有小伙伴的电脑系统运行缓慢卡顿&#xff0c;现在想通过重装系统来解决问题。咨询电脑重装系统会怎么样对系统有影响吗&#xff0c;现在小编就带大家看看电脑重装系统后会怎样。 方法/步骤&#xff1a; 一、电脑重装系统会怎么样 1、我们的电脑重装系统后&#xff0c;电脑…...

100种思维模型之反熵增思维模型-47

查理芒格被誉为反熵增思维模型的倡导者。本文将介绍查理芒格的反熵增思维模型&#xff0c;并分析它的实用性。 一、什么是熵增&#xff1f; 在物理学中&#xff0c;熵是衡量系统无序程度的指标。系统的熵越高&#xff0c;其无序程度越高。这个概念也可以应用到其他领域。在金融…...

【网络安全】Xss漏洞

xss漏洞 xss漏洞介绍危害防御方法xss测试语句xss攻击语句1. 反射性xss2.存储型xss3.DOM型xssdvwa靶场各等级渗透方法xss反射型&#xff08;存储型方法一致&#xff09;LowMediumHightimpossible Dom型LowMediumHight xss漏洞介绍 定义&#xff1a;XSS 攻击全称跨站脚本攻击&am…...

17.网络爬虫—Scrapy入门与实战

这里写目录标题 Scrapy基础Scrapy运行流程原理Scrapy的工作流程Scrapy的优点 Scrapy基本使用(豆瓣网为例)创建项目创建爬虫配置爬虫运行爬虫如何用python执行cmd命令数据解析打包数据打开管道pipeline使用注意点 后记 前言&#xff1a; &#x1f3d8;️&#x1f3d8;️个人简介…...

【面试题】JavaScript 中 try...catch 的使用技巧 ?

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 作为一位 Web 前端工程师&#xff0c;JavaScript 中的 try...catch 是我们常用的特性之一。…...

Java 命名格式规范

Java 命名格式规范 概述 简洁清爽的代码风格应该是大多数开发工程师所期待的。在编码过程中笔者常常因为起名字而纠结&#xff0c;夸张点可以说是编程 5 分钟&#xff0c;命名两小时&#xff01;究竟为什么命名成为了编码中的拦路虎。 每个公司都有不同的标准&#xff0c;目…...

【C++】STL中的容器适配器 stack queue 和 priority_queue 的模拟实现

STL中的容器适配器 一、容器适配器1、什么是容器适配器2、STL标准库中的容器适配器 二、stack的模拟实现1、stack的简单介绍2、栈的模拟实现 三、queue的模拟实现1、queue的简单介绍2、queue的模拟实现 四、priority_queue的模拟实现1、priority_queue的简单介绍2、priority_qu…...

MongoDB 聚合管道中使用算术表达式运算符

算术表达式运算符主要用于实现数字之间的算术运算&#xff0c;主要包含了对加、减、乘、除、余数、截取、舍入等算术操作。 下面我们进行详细介绍&#xff1a; 一、准备数据 初始化商品数据 db.goods.insertMany([{ "_id": 1, name: "薯片", size: &q…...

代码随想录算法训练营第四十三天-动态规划5|1049. 最后一块石头的重量 II , 494. 目标和 , 474.一和零

最后一块石头重量转化为将一个集合分隔成两个集合&#xff0c;两个集合之间的差值最小&#xff0c;就是最后剩下最小的石头重量。这里可以求集合的一个平均值&#xff0c;如果正好等于平均值&#xff0c;说明可以抵消&#xff0c;这时候重量为0&#xff0c;如果不行&#xff0c…...

《淘宝网店》:计算总收益

目录 一、题目 二、思路 1、当两个年份不一样的时候 &#xff08;1&#xff09;from年剩余之后的收益 &#xff08;2&#xff09;中间年份的全部收益 &#xff08;3&#xff09;to年有的收益 2、同一个年份 三、代码 详细注释版本&#xff1a; 简化注释版本&#xff…...

2023年03月青少年软件编程C语言一级真题答案——持续更新.....

1.字符长方形 给定一个字符,用它构造一个长为4个字符,宽为3个字符的长方形,可以参考样例输出。 时间限制:1000 内存限制:65536 输入 输入只有一行, 包含一个字符。 输出 该字符构成的长方形,长4个字符,宽3个字符。 样例输入 * 样例输出 **** **** ****#include<bi…...

家用洗地机好用吗?好用的洗地机分享

洗地机是一种高效、节能、环保的清洁设备&#xff0c;广泛应用于各种场所的地面清洁工作。它不仅可以快速清洁地面&#xff0c;还可以有效去除污渍、油渍等难以清洁的污染物&#xff0c;让地面恢复光洁如新的状态。同时&#xff0c;洗地机还可以减少清洁人员的劳动强度&#xf…...

《分解因数》:质因数分解

目录 一、题目&#xff1a; 二、思路&#xff1a; 三、代码&#xff1a; 一、题目&#xff1a; 分解因数 《分解因数》题目链接 所谓因子分解&#xff0c;就是把给定的正整数a&#xff0c;分解成若干个素数的乘积&#xff0c;即 a a1 a2 a3 ... an,并且 1 < a1…...

(排序10)归并排序的外排序应用(文件排序)

TIPS 在一些文件操作函数当中&#xff0c;fputc与fgetc这两个函数都是针对字符的&#xff0c;如果说你需要往文件里面去放入整形啊等等&#xff0c;不是字符的类型&#xff0c;这时候就用fprintf&#xff0c;fscanf在参数里面数据类型控制一下就可以。但是话说回来&#xff0c…...