Java实现连接数据库验证登录和注册(附详细知识点讲解)

文章目录

  • 1、前言
    • 1.1、为什么要写这篇文章
    • 1.2、使用的软件
    • 1.3、导航
    • 1.4、讲解视频
  • 2、JDBC
    • 2.1、简介
    • 2.2、导入jar包
    • 2.3、创建第一个JDBC程序
    • 2.3.5、JDBC程序完整代码
    • 2.4、JDBC工具类
    • 2.4.5、JdbcUtils工具类完整代码
    • 2.5、TestInsert类:增
    • 2.6、TestDelete类:删
    • 2.7、 TestUpdate类:改
    • 2.8、TestSelect类:查
  • 3、SQL注入
    • 3.1、问题引入
    • 3.2、PreparedStatement对象
    • 3.3、PreTestSelect类:查
    • 3.4、PreTestInsert类:增
    • 3.5、PreTestDelete类:删
    • 3.6、PreTestUpdate类:改
  • 4、IDEA连接数据库
    • 4.1、建立连接
  • 5、事务
    • 5.1、ACID原则
    • 5.2 、模拟银行账户
  • 6、数据库连接池
    • 6.1、问题引入
    • 6.2、简介
    • 6.3、开源数据库连接池
    • 6.4、Druid下载jar包
    • 6.5、配置
    • 6.6、DruidUtils类:工具
    • 6.7、DruidTest类:测试
  • 7、用户登录验证实现
    • 7.1、创建数据库建表
    • 7.2、登录按钮监听
    • 7.3、代码实现
    • 7.4、界面优化
    • 7.5、补充说明
  • 8、用户注册功能实现
    • 8.1、loginFrame修改
    • 8.2、RgsterFrame类:注册
    • 8.2、设置约束
    • 8.3、运行结果

1、前言

1.1、为什么要写这篇文章

学完Java基础后,一般会做个项目练手(上一篇博客有讲到 Java在线聊天室课程设计 )
当中肯定会涉及到登录验证,但没学过数据库 ,不知道如何操作;只能把用户账户密码预存在一个txt文本当中,然后通过IO流读取验证
最后去搜相应的资料和网课进行学习,现在问题已解决,给大家做分享

1.2、使用的软件

IDEA:编写Java代码,eclipse也可
Navicat:图形化操作数据库,当然IDEA里面也有内置的DataBase,不过社区版只能下载相应的插件。除此,在Navicat内可以进行SQL语句编写

图片[1] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

1.3、导航

如标题所说,想要简单实现连接数据库去验证登录
请直接跳转 7、用户登录验证实现,其余内容为对应需补充的知识点

1.4、讲解视频

B站:十分钟上手JDBC

2、JDBC

2.1、简介

JDBC(Java DataBase Connectivity):是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。它由一组用Java语言编写的类和接口组成。

图片[2] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

2.2、导入jar包

下载地址:mysql_JDBC_jar包

图片[3] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

图片[4] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

2.3、创建第一个JDBC程序

新建测试类 JdbcFirstDemo ,以下是固定写法
1、加载驱动图片[5] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

2、 用户信息和url
jdbc_test 这里是数据库的名称,改成自己的就行了
图片[6] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL
没有表的话,在navicat当中先去建个表
图片[7] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

3、连接成功
图片[8] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

4、statement 执行SQL的对象
图片[9] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

5、执行SQL语句,返回结果集
图片[10] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

SQL语句可以现在Navicat中编写,再复制到IDEA里面:

图片[11] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

6、释放连接
图片[12] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

运行结果:

图片[13] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

2.3.5、JDBC程序完整代码

完整代码如下:

//第一个JDBC例子public class JdbcFirstDemo {public static void main(String[] args) throws ClassNotFoundException, SQLException {//1、加载驱动//DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());Class.forName("com.mysql.cj.jdbc.Driver");//固定写法,加载驱动//2、用户信息和urlString url="jdbc:mysql://localhost:3306/jdbc_test" /> +"&userSSL=false&serverTimezone=GMT%2B8";String username="root";//下面一句应该为密码的英文,写博客的时候给我爆风险警告了//String 密码 ="123456";//3、连接成功,数据库对象 Connection 代表数据库Connection connection = DriverManager.getConnection(url, username, password);//4、执行sql的对象 statementStatement statement = connection.createStatement();//5、执行sql的对象 去执行sql,可能存在结果,返回结果String sql="select * from player";ResultSet resultSet = statement.executeQuery(sql);//查看输出数据while(resultSet.next()){System.out.println("name = "+resultSet.getObject("name"));System.out.println("number = "+resultSet.getObject("number"));System.out.println(" 密码 = "+resultSet.getObject("password"));}//写博客说这里写password有风险,我就改成中文了 //6、释放连接resultSet.close();statement.close();connection.close();}}

2.4、JDBC工具类

思想:加载驱动、获取连接、释放连接不变,变的只有sql语句

图片[14] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

图片[15] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

这里可能有同学不清楚反射,但是没关系,可以先跟着写一遍
可以不用 db.properties 这个文件,按照 2.3.5 那种方式编写 ☹️
图片[16] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

图片[17] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

2.4.5、JdbcUtils工具类完整代码

public class JdbcUtils {private static String driver=null;private static String url=null;private static String username=null;private static String password=null;static {try{InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");Properties properties = new Properties();properties.load(is);driver=properties.getProperty("driver");url=properties.getProperty("url");username=properties.getProperty("username");password=properties.getProperty("password");//驱动只加载一次Class.forName(driver);}catch(Exception e){e.printStackTrace();}}//获取连接public static Connection getConnection() throws SQLException {return DriverManager.getConnection(url,username,password);}//释放连接public static void release(Connection cnn, Statement stmt, ResultSet rs){if(rs!=null){try {rs.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if(stmt!=null){try {stmt.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if(cnn!=null){try {cnn.close();} catch (SQLException throwables) {throwables.printStackTrace();}}}}

2.5、TestInsert类:增

编写数据库增加数据测试类

图片[18] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

2.6、TestDelete类:删

编写数据库删除数据测试类

图片[19] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

2.7、 TestUpdate类:改

编写数据库修改数据测试类

图片[20] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

2.8、TestSelect类:查

编写数据库查找数据测试类
查找相对于增、删、改来说是要容易一些的

图片[21] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL
图片[22] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

大家可能注意到了这里rs.getString(),如果你知道是返回的是String类型就用这个,那么同理返回的int类型就用 rs.getInt()如果不知道用啥就用rs.getObject()

图片[23] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

3、SQL注入

3.1、问题引入

接着上面的查询,我们现在想根据账号和密码进行信息查询
图片[24] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

简单模拟一个登陆业务:

图片[25] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

运行结果:

图片[26] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

如果这个时候更改一下输入的账号和密码,不走寻常路:

图片[27] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

可以看到,所有的数据均符合,都被查找出来(rs.next()一直为true)

3.2、PreparedStatement对象

可以防止SQL注入!!!

3.3、PreTestSelect类:查

我们可以对之前编写的TestSelect类进行一些变化:

图片[28] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

3.4、PreTestInsert类:增

图片[29] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

3.5、PreTestDelete类:删

图片[30] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

3.6、PreTestUpdate类:改

图片[31] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

4、IDEA连接数据库

其实IDEA内也可以查看数据库的表,对数据进行增删改查的操作

4.1、建立连接

如果用的不是企业版,是社区版的话,就没有database这个选项

图片[32] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

解决办法:下载插件,使用DB Browser

图片[33] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

新建连接:

图片[34] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

界面如下:

图片[35] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

不过有几次我明明对数据进行了操作,刷新IDEA里的表,数据一直没有更新;跑到Navicat里面去看数据已经进行了更新

5、事务

事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。

5.1、ACID原则

图片[36] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

5.2 、模拟银行账户

图片[37] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

6、数据库连接池

6.1、问题引入

图片[38] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

6.2、简介

图片[39] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

6.3、开源数据库连接池

图片[40] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

6.4、Druid下载jar包

图片[41] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

图片[42] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

提供1.2.12版本jar包的下载地址:druid-1.2.12.jar下载

图片[43] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

6.5、配置

导入lib目录,我的IDEA自动解压了;大家若没有自动解压,需要手动Add as Library

图片[44] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

根据后面要使用到的DruidDataSourceFactory的源码,应该对properties文件的属性进行修改

图片[45] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

图片[46] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

6.6、DruidUtils类:工具

重写工具类,不过整体和之前的JdbcUtils差不多

图片[47] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

6.7、DruidTest类:测试

可以看到,基本上换汤不换药,依然正常运行

图片[48] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

7、用户登录验证实现

7.1、创建数据库建表

首先我们得在数据库里面有一张对应验证登录的表

图片[49] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

7.2、登录按钮监听

我们利用JFrame制作一个简单的登录界面
这个时候是有登录按钮的,按钮绑定监听事件来验证登录是否正确

图片[50] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

7.3、代码实现

public class LoginFrame extends JFrame {private static final Integer WIDTH=600;private static final Integer HEIGHT=400;public LoginFrame(){setTitle("登录界面");setSize(WIDTH,HEIGHT);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setResizable(false);setLocationRelativeTo(null);JLabel jblBg = new JLabel();//可插入背景图片jblBg.setBounds(0,0,WIDTH,HEIGHT);jblBg.setLayout(null);this.add(jblBg);//账号JLabel uid = new JLabel("账号");uid.setBounds(170,120,50,30);jblBg.add(uid);//账号输入框JTextField uidInput = new JTextField();uidInput.setBounds(240, 120, 160, 30);jblBg.add(uidInput);//密码JLabel upwd=new JLabel("密码");upwd.setBounds(170, 180, 50, 30);jblBg.add(upwd);//密码输入框JPasswordField upwdInput = new JPasswordField();upwdInput.setBounds(240, 180, 160, 30);jblBg.add(upwdInput);//登录按钮JButton btnLogin=new JButton("登录");btnLogin.setBounds(260, 250, 100, 30);btnLogin.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String getInputUid=uidInput.getText();String getInputUpwd=upwdInput.getText();Connection conn=null;PreparedStatement pstmt=null;ResultSet rs=null;try {conn=JdbcUtils.getConnection();String sql="SELECT * FROM userinfo WHERE UID =" />;pstmt=conn.prepareStatement(sql);pstmt.setString(1,getInputUid);pstmt.setString(2,getInputUpwd);rs= pstmt.executeQuery();//创建弹窗JDialog dialog = new JDialog();dialog.setLocationRelativeTo(null);dialog.setSize(200,200);if(rs.next()){dialog.add(new JLabel("登录成功!"));}else{dialog.add(new JLabel("登录失败!"));}dialog.setVisible(true);} catch (SQLException throwables) {throwables.printStackTrace();}finally {JdbcUtils.release(conn,pstmt,rs);}}});jblBg.add(btnLogin);setVisible(true);}//主函数只需运行loginFrame即可public static void main(String[] args) {new LoginFrame();}}

登录成功:

图片[51] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

登录失败:

图片[52] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

7.4、界面优化

我们可以对界面稍稍优化一下
加入背景图片,调整字体、按钮颜色

图片[53] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

代码更新:

public class LoginFrame_new extends JFrame {private static final Integer WIDTH=600;private static final Integer HEIGHT=400;public LoginFrame_new(){setTitle("登录界面");setSize(WIDTH,HEIGHT);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setResizable(false);setLocationRelativeTo(null);ImageIcon imgBg= new ImageIcon("src/images/JRbg.jpg");JLabel jblBg = new JLabel(imgBg);//可插入背景图片jblBg.setBounds(0,0,WIDTH,HEIGHT);jblBg.setLayout(null);this.add(jblBg);//账号JLabel uid = new JLabel("Account:");uid.setBounds(150, 120, 110, 30);uid.setFont(new Font("PingFang SC", Font.BOLD, 17));uid.setForeground(Color.BLACK);jblBg.add(uid);//账号输入框JTextField uidInput = new JTextField();uidInput.setBounds(260, 120, 180, 30);jblBg.add(uidInput);//密码JLabel upwd=new JLabel("Password:");upwd.setBounds(150, 180, 110, 30);upwd.setFont(new Font("PingFang SC", Font.BOLD, 17));upwd.setForeground(Color.BLACK);jblBg.add(upwd);//密码输入框JPasswordField upwdInput = new JPasswordField();upwdInput.setBounds(260, 180, 180, 30);jblBg.add(upwdInput);//登录按钮JButton btnLogin=new JButton("Login");btnLogin.setBounds(270, 250, 110, 40);btnLogin.setBackground(Color.PINK);btnLogin.setForeground(Color.WHITE);btnLogin.setFont(new Font("PingFang SC", Font.BOLD, 17));btnLogin.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String getInputUid=uidInput.getText();String getInputUpwd=upwdInput.getText();Connection conn=null;PreparedStatement pstmt=null;ResultSet rs=null;try {conn= JdbcUtils.getConnection();String sql="SELECT * FROM userinfo WHERE UID =" />;pstmt=conn.prepareStatement(sql);pstmt.setString(1,getInputUid);pstmt.setString(2,getInputUpwd);rs= pstmt.executeQuery();//创建弹窗JDialog dialog = new JDialog();dialog.setLocationRelativeTo(null);dialog.setSize(200,200);if(rs.next()){dialog.add(new JLabel("登录成功!"));}else{dialog.add(new JLabel("登录失败!"));}dialog.setVisible(true);} catch (SQLException throwables) {throwables.printStackTrace();}finally {JdbcUtils.release(conn,pstmt,rs);}}});jblBg.add(btnLogin);setVisible(true);}//主函数只需运行loginFrame即可public static void main(String[] args) {new LoginFrame_new();}}

7.5、补充说明

因为数据库连接池是后来加上去的
所以该验证登录程序未做相应的优化

8、用户注册功能实现

和上面的登录换汤不换药,完全可以用上面登录界面的模板
加上一个注册按钮,点击打开注册界面,去验证注册是否成功

8.1、loginFrame修改

图片[54] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

8.2、RgsterFrame类:注册

图片[55] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL
图片[56] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL
图片[57] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

8.2、设置约束

图片[58] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

8.3、运行结果

图片[59] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

注册成功

图片[60] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

注册失败

图片[61] - Java实现连接数据库验证登录和注册(附详细知识点讲解) - MaxSSL

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享