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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 在最初的表白墙版本中,页面已刷新,“甜言蜜语”就会丢失:

【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去操控页面)


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
监控 关系型数据库 MySQL
mysql升级和降级
mysql升级和降级
70 9
|
3月前
|
存储 缓存 关系型数据库
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
阿里云RDS率先推出新型存储类型通用云盘,提供低延迟、低成本、高持久性的用户体验。
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
|
3月前
|
存储 关系型数据库 MySQL
升级宝典!阿里云RDS MySQL助力MySQL5.7升级到8.0
2023年10月,社区MySQL5.7停服。阿里云RDS MySQL对MySQL5.7的服务将进行到2024年10月21日,同时,并将通过有效的方案和大量的升级经验,鼓励和助力广大企业和开发者将MySQL5.7升级到MySQL8.0。
|
30天前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
96 0
|
7月前
|
关系型数据库 MySQL 数据库
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
389 0
|
2月前
|
SQL 关系型数据库 MySQL
【JavaEE进阶】 数据库连接池与MySQL企业开发规范
【JavaEE进阶】 数据库连接池与MySQL企业开发规范
|
4月前
|
存储 分布式计算 关系型数据库
云原生数据仓库AnalyticDB MySQL湖仓版架构升级,持续释放技术红利!
云原生数据仓库AnalyticDB MySQL湖仓版架降价23%!持续提供高性价比的产品服务
|
4月前
|
存储 SQL 关系型数据库
MySQL5.7到8.0的升级迁移!高效的MySQL跨版本迁移技术解读
NineData是一种高效、稳定且易于使用的迁移工具,可帮助用户将MySQL 5.7迁移到MySQL 8.0。由于MySQL 5.7已经结束生命周期并不再获得技术支持,因此迁移至MySQL 8.0是必要的。NineData提供了数据复制功能,包括数据迁移和实时同步,还支持双向复制。与传统迁移方法相比,NineData具有简单易用、数据一致、强劲性能和高可靠性的优势。它提供了完善的观测和干预能力,保障迁移的成功。此外,NineData还提供了对比功能,确保数据的一致性。通过简单的配置过程,用户可以实现自动化的数据迁移。NineData还提供了完善的观测和干预能力,帮助用户追踪迁移进展并诊断和修复
499 3
|
4月前
|
存储 分布式计算 关系型数据库
|
5月前
|
存储 关系型数据库 MySQL
58到家MySQL军规升级版
58到家MySQL军规升级版