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

8 篇文章 0 订阅

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

在这里插入图片描述

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

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

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

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

1. 后端引入JDBC的依赖

有了依赖,才能使用JDBC~

在这里插入图片描述

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

在这里插入图片描述

粘贴到后端pom.xml里

在这里插入图片描述

2. 建库建表

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

  1. 在后端识别是否存在此库此表(否则自动建立)
  2. 在后端识别库表是否存在,否则建立
  3. 在MySQL那边直接建立数据库和表(本文写法)

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

在这里插入图片描述

建库:
在这里插入图片描述

建表:

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

在这里插入图片描述

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

在这里插入图片描述

3.1 doGet方法改写

  1. 从数据库中加载数据
    • load方法(需要自己编写)
  2. 加载的数据打包成一个数组/集合
    • load方法的返回值!
  3. 解析成json响应回去
    在这里插入图片描述
3.1.1 构建本地数据源

在这里插入图片描述

  • 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方法

  1. 将请求里的json转化为对象
    • 传入save方法中
  2. 在save方法中,将对象转化为“插入sql语句”,存入数据库

在这里插入图片描述

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语句
  • ?就是通配符~

在这里插入图片描述

服务器跑异常了!

  • 经典错误:

在这里插入图片描述

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的原因,所以根方法也要处理异常~

在这里插入图片描述

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

输入测试:

在这里插入图片描述

  • 可能是你的DataSource和Connection是jdbc的,我们要的是java的,换一换~
  • 可能是你Love的无参构造方法没有定义
  • 可能是你sql语句有误,或者单词拼写错误…

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

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

  1. 约定前后端交互方式(接口)
  2. 实现服务器代码(涉及操作数据库)
  3. 实现客户端代码(涉及ajax构造请求,并且用webapi去操控页面)

文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

表白墙后续会再次优化(如登录与注册,“甜言蜜语”的显示优化…),敬请期待!


  • 35
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

s:103

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值