使用JDBC实现QQ登录

news2024/9/28 13:23:19

在实际开发中,用户信息是存放在数据库中的,登录时的账号和密码信息也需要去数据库中查询,本节将使用JDBC技术来完善QQ登录案例。

1.创建数据表,并添加用户数据

在jdbc数据库中创建数据表tb_qquser,并在表中插入3条数据,其执行的SQL语句如下:

CREATETABLE tb_qquser (
        id INTPRIMARYKEYAUTO_INCREMENT,
        qqnumber VARCHAR(50),
        password VARCHAR(50));INSERTINTO tb_qquser (qqnumber, password)VALUES('123456789','123');INSERTINTO tb_qquser (qqnumber,password)VALUES('987654321','456');INSERTINTO tb_qquser (qqnumber,password)VALUES('1314520888','123abe');

在实际开发中,用户信息是存放在数据库中的,登录时的账号和密码信息也需要去数据库中查询,本节将使用JDBC技术来完善QQ登录案例。

2.编写查询用户方法

创建一个用于实现用户登录相关操作的类LoginDao,并在类中编写查询用户的方法findUser(),如例9-2所示。

例9-2 LoginDao.java

import java.sql.*;public class LoginDao {
    PreparedStatement prestnt =null;
    Connection conn =null;
    ResultSet rs =null,//查询用户publicBoolean findUser (String qqnumber, String pwd)
                          throws SQLException {
        try {
          //1.加载数据库驱动
          Class.forName("com.mysq1.jdbc.Driver");
          String url ="jdbc:mysql://localhost:3306/jdbc":
          String username ="root";
          String password ="root";//2.获取数据库连接
          conn =DriverManager .getConnection (url, username, password);//3.定义需要执行的SQL
          String sql="select * from tb_qquser "+"where qqnumber =? "+"and password =?";//4.创建PreparedStatement对象
          prestmt =conn.prepareStatement(sql);
          prestmt.setString(1, qqnumber);
          prestmt.setString (2, pwd);//5.执行SQL并将获取的数据信息存放在ResultSet中
          rs =prestmt.executeQuery();//如果查询的结果集中有超过一条的记录,则登录成功if(rs.next()) { returntrue; }
        } catch (Exception e) {
          e.printStackTrace();
        } finally {
           //6.释放资源if(rs !=null) {rs.close(); }
           if(prestnt !=null){prestmt.close();}
           if(conn !=null) {conn.close();}
        }
        returnfalse;
    }
}

在上述的查询用户方法中,加粗部分的代码就是查询操作的主要代码。在定义的SQL中,使用占位符“?”来表示查询条件,并通过PreparedStatement对象的setString()方法设置参数值。执行SQL后,如果结果集中有超过一条以上的数据,那么就表示数据表中有此用户,会返回true;否则表示没有此用户,将返回false。

3.修改监听方法

将登录监听器类LoginListener中 actionPerformed()方法内的模拟查询用户名和密码的代码修改为查询数据库的方法,修改后的方法代码如下:

public void actionPerformed (ActionEvent e) {
    //1.获取登录的账号和密码
    String name =(String) jco.getSelectedItem();
    String pwd =new String (jpa.getPassword ());//创建LoginDao对象
    LoginDao loginDao =new LoginDao ();//查询登录用户,如果有此用户并且密码正确则返回trueBoolean bl =false;
    try {
    bl =loginDao.findUser (name, pwd);
    } catch (SQLException el) 
        el.printStackTrace();
        {
    //2判断输入的账号和密码是否正确If(bl)  {
       //账号正确,先关闭当的JErame登录窗口
       jf.diapose ():
       //模监显示登录成功后的QQ窗口
       JFrane jfn =new JErame();
       Jfn.setSize(289,687);
       jfn.setLocation(800,100);
       jfn.setUndecorated(true);
       jfn.setResizable (true);
       jfn.setVisible (true);//为QQ显示窗口添加背景图片和退出按钮组件
       JPanel panel =new JPanel ();
       panel.setLayout (null);
       panel.setPreferredSize(new Dimension (0,140));
       ImageIcon image =new ImageIcon("images/qqSuccess.jpg");
       JLabel background =new JLabel (image);
       background.setBounds (0,0,289,687);
       panel.add(background);//添加退出按纽
       JButton out=
       new JButton (new ImageIcon("images/close2 normal.jpg"));out.setBounds(265,0,26,26);out.setRolloverIcon(new ImageIcon("images/close2 hover.jpg"));out.setBorderPainted(false);
       panel.add(out);
       jfn.add(panel);//为退出按钮注册监听器,关闭当前窗口out.addActionListener (event ->jfn.dispose ());)else(//QQ账号或密码输入错误,弹出提示信息
        J0ptionPane.showMessageDialog (null,
                “你输入的账户名或密码不正确,请重新输入!”);
     }
}

从上述代码可以看出,所修改的部分其实非常简单。首先创建了LoginDao对象,然后使用该对象的findUser()方法来查询是否存在所输入的用户,如果返回结果为true,则表示存在该用户,可以成功登录;如果为false,则提示账户名或密码错误。

4.启动程序,查看效果

修改完成后,即可启动程序,此时的登录窗口如图9-5所示。

在QQ登录窗口分别输入正确的账号和密码并单击登录按钮后,将显示登录后的窗口信息,如图9-6所示。

从图9-6可以看出,用户已登录成功,这说明使用JDBC已正确查询出了数据表中的数据。如果通过其他两个账号,在输入正确的密码后,将同样可以登录成功。这里就不再演示了,读者可自行测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣sql简单篇练习(十七)

力扣sql简单篇练习(十七) 1 销售分析| 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 可以考虑使用all函数 SELECT seller_id FROM Sales GROUP BY seller_id HAVING sum(price)>all(SELECT sum(price)FROM SalesGROUP BY seller_id )1.3 运行…

ChatGpt : 基于OpenAI + Flask快速搭建个人领域内的Q/A问答接口—嵌入网站内知识

文章目录学习前言OpenAI简介Q/A问答接口实现流程1、网络爬虫2、构建嵌入索引3、使用嵌入构建Q/A问答系统4、基于flask框架进行接口封装5、接口测试使用学习前言 最近ChatGpt太火热了,赶紧来了解一波相关情况… 目前来说ChatGpt只有2021年之前的知识,如果…

1.6 epoll实战使用

文章目录1、连接池2、epoll两种工作模式2.1、LT模式2.2、ET模式3、后端开发面试题4、epoll验证1、连接池 将每一个套接字和一块内存进行绑定,连接池就是一个结构体数组,通过链表来维护一个空闲连接。 1、ngx_get_connection(int fd)从空闲链表取一个空闲…

MySQL 中的事务详解

前言MySQL 中的事务操作,要么修改都成功,要么就什么也不做,这就是事务的目的。事务有四大特性 ACID,原子性,一致性,隔离性,持久性。A(Atomic),原子性:指的是整个数据库事务操作是不可…

vue2版本《后台管理模式》(下)

文章目录前言一、home 页以下都属于home子组件二、header 头部 组件二、Menu 页面三、Bread 面包屑四、Footer五 、分页器: Pageing![在这里插入图片描述](https://img-blog.csdnimg.cn/fbe9bb7e84a04ccda4d3fc9f4ab9c36b.png#pic_center)六、权限管理总结前言 这章…

MySQL中索引详解

目录 一.介绍 二.索引分类 三.MySQL的索引 介绍 普通索引 唯一索引 注意 主键索引 组合索引 全文索引 空间索引 删除索引 四.索引的原理 概述 Hash算法 二叉树 平衡二叉树 BTREE树 MyISAM引擎使用BTree 六.索引的特点 优点 缺点 创建索引原则 一.介绍 索引是通…

[翻译]GPDB中的文件空间与表空间

GPDB中的文件空间与表空间GreenPlum是一个快速、灵活、纯软件的分析数据处理引擎,具有一些工具和特性可以充分利用任意个数硬件或者虚拟环境用来部署集群。这里讨论的一个特性是使用文件空间将数据加载和查询活动与底层的IO卷匹配。一旦在集群中创建了一个物理文件空…

【C++】类与对象(三) 运算符重载 赋值重载 取地址及const取地址操作符重载

前言 本章我们接替前一章继续深入理解类的默认成员函数,赋值重载,取地址重载,及const取地址操作符重载 但是在讲剩下的三个默认成员函数之前,我们要先来了解运算符重载,因为赋值重载,取地址重载&#xff0c…

10分钟学会python对接【OpenAI API篇】

今天学习 OpenAI API,你将能够访问 OpenAI 的强大模型,例如用于自然语言的 GPT-3、用于将自然语言翻译为代码的 Codex 以及用于创建和编辑原始图像的 DALL-E。 首先获取生成 API 密钥 在我们开始使用 OpenAI API 之前,我们需要登录我们的 Op…

Linux 定时任务调度(crontab)整理,太实用了!

crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。可以使用crontab定时处理离线任务,比如每天凌晨2点更新数据等,经常用于系统任务调度。服务启动和关闭…

AWS攻略——创建VPC

文章目录创建一个可以外网访问的VPCCIDR主路由表DestinationTarget主网络ACL入站规则出站规则子网创建EC2测试连接创建互联网网关(IGW)编辑路由表参考资料在 《AWS攻略——VPC初识》一文中,我们在AWS默认的VPC下部署了一台可以SSH访问的机器实…

WRAN翻译

基于小波的图像超分辨残差注意力网络 Wavelet-based residual attention network for image super-resolution 代码: https://github.com/xueshengke/WRANSR-keras 摘要: 图像超分辨率技术是图像处理和计算机视觉领域的一项基础技术。近年来&#xff0c…

【流辰信息技术】做好数据管理,赋能行业全速提升产业效能

在经济快速发展的当下,正是各行各业大展拳脚,全力以赴奔赴产能提升的好契机。做好企业,不仅要有一颗发展雄心,而且还要学会运用正确的技术和发展战略,推动企业向前进。流辰信息技术是低代码开发领域里的服务商&#xf…

自动化测试高频面试题(含答案)

Hello,你们的好朋友来了!今天猜猜我给大家带来点啥干货呢?最近很多小伙伴出去面试的时候经常会被问到跟自动化测试相关的面试题。所以,今天特意给大家整理了一些经常被公司问到的自动化测试相关的面试题。停,咱先收藏起…

「团队管理」前端开发者如何规划并构建UCD的中长期前端开发能力与团队

文章目录 前言一、个人规划1.1 技能和知识的提升1.2 用户研究和用户体验1.3 团队协作能力1.4 项目管理和交付能力1.5 技术创新和开发效率二、构建UCD团队2.1 人才招聘和培养2.2 角色定义和分工2.3 团队文化和价值观前言 UCD(用户中心设计)是一种基于用户需求的设计方法论,将…

五千字总结一枚测试妹纸不平凡的2022

大家好,我是美团程序员,一个混过大厂,待过创业公司,爱给开发同学提Bug的测试妹纸一枚。2022年,是工作的第六年,也是具有突破性成长的一年,一直挺喜欢六这个数字,果然不负期望&#x…

C控制语句(if,switch,goto)

一.if 1.if循环语句格式 if(expression1) statement1 else if(expression2) statement2 else if(expression3) statement3 . . . else statement(n) else if 可以使用也可以不是用。 这里我们用一个例子进行讲解 2.if else 注意事项 If else if else之间只允许有一条语句&…

Shell - 随时启动 + 固定时间启动脚本

一.引言 有一个线上任务需要在每 10 min内的 5min 后执行,例如 5:10、15:10 ...、55: 10,正常情况下需要查看 Clock Time,待时间到达 5min 后手动启动,下面实现随时启动脚本,定时在 x5:10 点执行。 二.实现 A.固定 5…

【第0天】SQL快速入门-了解MySQL存储引擎(SQL 小虚竹)

回城传送–》《32天SQL筑基》 文章目录零、前言一、什么是数据库引擎二、MYSQL中有哪些数据库引擎2.1、MyISAM2.2、Memoey2.3、InnoDB三、MyISAM和InnoDB的区别3.1、MYSQL版本支持默认引擎不同MyISAMInnoDB3.2、数据的存储结构不同MyISAMInnoDB3.3、存储空间的消耗不同MyISAMIn…

新闻稿写作指南

当你想要传达一则新闻,写一份新闻稿是非常必要的。新闻稿的目的是让读者了解某个事件或信息,以及提供与之相关的背景信息和重要细节。以下是新闻稿的写作指南,帮助你写出一份清晰、简洁、有价值的新闻稿。1、选择一个有新闻价值的主题你的新闻…