【JavaEE】表白墙再升级(MySQL实现持久化)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在最初的表白墙版本中,页面已刷新,“甜言蜜语”就会丢失:

【JavaEE】表白墙再升级(MySQL实现持久化)


在最初的表白墙版本中,页面已刷新,“甜言蜜语”就会丢失:


【JavaScript】实战训练小项目-WebAPI_s:103的博客-CSDN博客

而在第二版本的表白墙,我们实现了页面刷新,“甜言蜜语”不会丢失,但是服务器刷新,“甜言蜜语”也会丢失:


【JavaEE】简单前后端分离小项目-表白墙_s:103的博客-CSDN博客

而这第三版本的表白墙,我们通过MySQL实现持久化,紧接着就是我们本篇文章了!


JDBC基础:【MySQL】Java-JDBC_s:103的博客-CSDN博客


1. 后端引入JDBC的依赖


有了依赖,才能使用JDBC~


中央仓库:Maven Repository: Central (mvnrepository.com)

f1b22be37a97427196f78b8a8cc1b075.png

我选择的是5.1.49,复制依赖~


3ee20e97ebfd4258ab6f474e98cf1e63.png


粘贴到后端pom.xml里



b62c189098584b24a20de9352b92b731.png


2. 建库建表


必须得用数据库和数据表才行呀


在后端识别是否存在此库此表(否则自动建立)

在后端识别库表是否存在,否则建立

在MySQL那边直接建立数据库和表(本文写法)

感兴趣的可以依照以下写法(模板)去实现1操作:


90e6ba523e354c2a95684e5c68d7f15a.png


建库:


5d635d7b0e1149f49ba2088a149f5e27.png

建表:


form 和 to 都是关键字,需要用反引号引用**(键盘左上角与~同键,英语版本不用shift按就是`)**


e99110fb21794c41818db15724189d5b.png


3. 编写数据库代码(JDBC)

5aebb666f70c4b16aa5a6c7eb8f3442c.png


3.1 doGet方法改写


从数据库中加载数据

load方法(需要自己编写)

加载的数据打包成一个数组/集合

load方法的返回值!

解析成json响应回去

f0bf206c38784b4caee2fb526cc9fdcc.png


3.1.1 构建本地数据源

54600d8732cb4221aae3c78b94ca085d.png


url那一段现在看也比较熟悉了,但是还是建议复制粘贴~

jdbc:mysql://127.0.0.1:3306/Loves/characterEncoding=utf8&useSSL=false


其中Loves为数据库名


3.1.2 用本地数据源构造连接器


Connection connection = dataSource.getConnection();


3.1.3 连接器将sql语句转化为“蓄势待发的状态”


String sql = "select * from message;";
PreparedStatement preparedStatement = connection.prepareStatement(sql);


3.1.4 一触即发!


给Love类添加构造方法:


class Love {
    public String from;
    public String to;
    public String love;
    @Override
    public String toString() {
        return "Love{" +
                "from='" + from + '\'' +
                ", to='" + to + '\'' +
                ", love='" + love + '\'' +
                '}';
    }
    public Love() {
        //没有这个一定不行!!!
        //因为后续json构建Love对象需要用到无参的构造方法
    }
    public Love(String from, String to, String love) {
        this.from = from;
        this.to = to;
        this.love = love;
    }
}



获取到ResultSet对象后,迭代他,存进list,释放资源后返回list

List<Love> list = new ArrayList<>();
while(set.next()) {
    String from = set.getString("from");
    String to = set.getString("to");
    String love = set.getString("love");
    list.add(new Love(from, to, love));
}
set.close();
preparedStatement.close();
connection.close();
return list;


3.2 doPost方法


将请求里的json转化为对象

传入save方法中

在save方法中,将对象转化为“插入sql语句”,存入数据库

0008c7e0dcbb4850be3cc7f3172efa9f.png


3.2.1 构建本地数据源并构造连接器


DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/Loves/characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("mmsszsd666");//这是俺的微信号,欢迎添加,相互学习!
Connection connection = dataSource.getConnection();


3.2.2 Love对象转化为sql语句


?就是通配符~


eae79f0391654a90a7fef84dd95ba957.png

服务器跑异常了!

经典错误:

e5e30911d2234c968e510859f254a579.png


String sql = "insert into message values(?, ?, ?);";
PreparedStatement preparedStatement = connection.prepareStatement(sql);


3.2.3 用Love对象的属性将通配符替换掉


preparedStatement.setString(1, love.from);
preparedStatement.setString(2, love.to);
preparedStatement.setString(3, love.love);


3.2.4 一触即发!


preparedStatement.executeUpdate();
preparedStatement.close();
connection.close();


4. 测试以及小结


是不是还没开始就结束了,没错只需要简简单单这么一改,就实现了持久化~

启动服务器,打开客户端:


可能因为异常用的是throws的原因,所以根方法也要处理异常~

a3cb3defc2bc48b2be64b8707ff11a11.png

可能是调用doXXX的方法里没有throws这个异常,所以用catch比较合适

输入测试:


a797be2de741467689a63951f92ef6f7.png


可能是你的DataSource和Connection是jdbc的,我们要的是java的,换一换~

可能是你Love的无参构造方法没有定义

可能是你sql语句有误,或者单词拼写错误…

bbe7c1a3f50d435c8a7a5b6c88473fae.png



用连着电脑热点的手机测试:

8a3fea04a8cb4e5195a51554d417f31b.png

c46ba4c4ff8d4d16b37caf520478bfc8.gif



刷新浏览器,刷新服务器测试:

image.png



通过上述代码,我们已经完成了一个简单的网站了!


而我们写更复杂的网站,都依靠这一样的逻辑:


约定前后端交互方式(接口)

实现服务器代码(涉及操作数据库)

实现客户端代码(涉及ajax构造请求,并且用webapi去操控页面)


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
12天前
|
关系型数据库 MySQL Linux
MySQL版本升级(8.0.31->8.0.37)
本次升级将MySQL从8.0.31升级到8.0.37,采用就地升级方式。具体步骤包括:停止MySQL服务、备份数据目录、下载并解压新版本的RPM包,使用`yum update`命令更新已安装的MySQL组件,最后启动MySQL服务并验证版本。整个过程需确保所有相关RPM包一同升级,避免部分包遗漏导致的问题。官方文档提供了详细指导,确保升级顺利进行。
73 16
|
23天前
|
关系型数据库 MySQL Linux
升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
当MySQL 8.4启动时报错“io_setup() failed with EAGAIN”时,通常是由于系统AIO资源不足所致。通过增加AIO上下文数量、调整MySQL配置、优化系统资源或升级内核版本,可以有效解决这一问题。上述解决方案详细且实用,能够帮助管理员快速定位并处理此类问题,确保数据库系统的正常运行。
67 9
|
2月前
|
存储 关系型数据库 MySQL
MySQL 8.0特性-自增变量的持久化
【11月更文挑战第8天】在 MySQL 8.0 之前,自增变量(`AUTO_INCREMENT`)的行为在服务器重启后可能会发生变化,导致意外结果。MySQL 8.0 引入了自增变量的持久化特性,将其信息存储在数据字典中,确保重启后的一致性。这提高了开发和管理的稳定性,减少了主键冲突和数据不一致的风险。默认情况下,MySQL 8.0 启用了这一特性,但在升级时需注意行为变化。
|
3月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
88 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
3月前
|
监控 关系型数据库 MySQL
如何升级MySQL数据库?
【10月更文挑战第16天】如何升级MySQL数据库?
|
4月前
|
监控 关系型数据库 MySQL
如何升级mysql的版本
如何升级mysql的版本
701 2
|
4月前
|
存储 监控 关系型数据库
如何升级MySQL版本?
如何升级MySQL版本?
279 2
|
5月前
|
SQL 存储 Oracle
MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行
MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行
95 0
|
7月前
|
存储 SQL 关系型数据库
【MySQL技术内幕】6.5-锁问题、阻塞、死锁、锁升级
【MySQL技术内幕】6.5-锁问题、阻塞、死锁、锁升级
195 2
|
8月前
|
存储 关系型数据库 MySQL
AnalyticDB MySQL新购页面融合升级,提供企业版购买选项
AnalyticDB MySQL新购页面升级,现推出企业版和基础版,不再区分湖仓版和数仓版。企业版(集群模式)和基础版(单机模式)融合了弹性模式和预留模式的功能,提供资源隔离、弹性扩展及高性能查询,适合开发测试和生产环境,而基础版适用于小规模测试,不推荐用于生产环境。
AnalyticDB MySQL新购页面融合升级,提供企业版购买选项
下一篇
开通oss服务