如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)

2年前 (2022) 程序员胖胖胖虎阿
142 0 0

💁 个人主页:黄小黄的博客主页
❤️ 支持我:👍 点赞 🌷 收藏 🤘关注
🎏 格言:一步一个脚印才能承接所谓的幸运

本文来自专栏:JDBC从入门到实战
欢迎点击支持订阅专栏 ❤️
如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)


写在前面

本文环境: jdk1.8mysql8.0IntelliJ IDEA 2021.3DataGrip 2021.3
 撰写本文是由于一位粉丝的求助,凑巧又是笔者本次的实验内容,所以本文只对 JDBC 如何访问数据库作操作性的叙述,并不涉及 JDBC 基础相关内容,有需要请期待专栏后续更新。本文仅供同学们交流学习使用,图片均有水印,请勿 copy,如需转载,欢迎私信。


文章目录

  • 写在前面
  • 1 操作准备
    • 1.1 导入 Mysql 对应的 jar 包
    • 1.2 创建Mysql数据库与基本表
  • 2 JDBC基础实验
    • 2.1 编写JDBC连接MySQL数据库myuser,查询并显示account表数据实例
    • 2.2 编写JDBC连接MySQL数据库,实现myuser数据库的增、删、改查的实例
  • 3 JDBC进阶实验——简易登录界面
    • 3.1 具体实现
    • 3.2 效果展示
  • 写在最后

1 操作准备

1.1 导入 Mysql 对应的 jar 包

  1. 首先进入 Mysql 下载官网: https://www.mysql.com/downloads/,将页面滑动到底端,点击 MySQL Community (GPL) Downloads
    如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)
  2. 选择 Connector/J
    如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)
  3. 选择 General Availability(GA) Releases,在 Select Operating System 下拉列表选择 Platform Independent,然后选择任意一种压缩包格式的文件 Download,根据提示下载,如果需要其他版本,可以点击 Archives
    如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)
  4. 下载完成后进行解压,即可在当前文件夹中看到下载好的 jar 包了。
    如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)
  5. 打开 idea 创建一个项目 JDBC 并创建 Moudle JDBCtest,在该模块下创建个目录 lib,并将刚刚下载好的 jar 包拷贝过来。
    如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)
  6. 右键将 jar 包, Add as Library
    如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)

1.2 创建Mysql数据库与基本表

🐰 打开 datagrip,新建一个查询,通过下面的代码创建一个 myuser 数据库用于 JDBC 访问练习,并创建一个表并录入数据,具体代码及表数据如下:

CREATE DATABASE myuser;
USE myuser;
CREATE TABLE IF NOT EXISTS account(
    name VARCHAR(50) PRIMARY KEY NOT NULL ,
    password VARCHAR(50) NOT NULL
);

INSERT INTO account VALUES ('张三', '123');
INSERT INTO account VALUES ('李四', '123');

如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)


2 JDBC基础实验

2.1 编写JDBC连接MySQL数据库myuser,查询并显示account表数据实例

🐻 1. 先创建项目、包及 Test.java,如下图所示:
如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)
🐦 2.运行下面的JDBC代码,代码后附运行结果图,记得将数据库密码(你的密码)位置处改成自己的密码:

package JDBC_test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * @author 小黄小黄不再迷茫
 * @version 1.0
 */

public class Test {
    public static void main(String args[]) {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");     //加载MYSQL JDBC驱动程序
            System.out.println("Success loading Mysql Driver!");
        }
        catch (Exception e) {
            System.out.print("Error loading Mysql Driver!");
            e.printStackTrace();
        }
        try {
            Connection connect = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/myuser","root","你的密码");
            //建立连接,URL为jdbc:mysql//服务器地址/数据库myuser ,后面的2个参数分别是登陆用户名和密码

            System.out.println("Success connect Mysql server!");
            Statement stmt = connect.createStatement(); //创建运行对象
            ResultSet rs = stmt.executeQuery("select * from account");//执行查询account表

            while (rs.next()) {
                System.out.println(rs.getString("name"));//获取name列的值(字符串型)
            }
        }
        catch (Exception e) {
            System.out.print("get data error!");
            e.printStackTrace();
        }
    }
}

如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)

2.2 编写JDBC连接MySQL数据库,实现myuser数据库的增、删、改查的实例

🐰 1. 创建如下包、类:
如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)
🐦 2.通过下面代码对 myuser 数据库的 account 表实现增删改查的操作:
Tips:同样别忘记将“你的密码”改成你的数据库密码哦!

package JDBC_test2;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


/**
 * @author 小黄小黄不再迷茫
 * @version 1.0
 */


public class Test2 {
    static Connection conn;
    static Statement st;

    public static void main(String[] args) {
        insert();   //插入添加记录
        update();   //更新记录数据
        delete();   //删除记录
        query();    //查询记录并显示
    }

    //(2)连接的获取,在操作前必须先获取与数据库的连接。
    private static Connection getConnection() {
        String driver = "com.mysql.cj.jdbc.Driver"; //若报错使用com.mysql.jdbc.Driver
        String url = "jdbc:mysql://localhost:3306/myuser?serverTimezone=UTC "; //myuser是数据库名称
        String username = "root"; //数据库用户名
        String password = "你的密码"; //数据库用户密码
        Connection conn = null;
        try {
            Class.forName(driver); //classLoader,加载对应驱动
            conn = (Connection) DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    //(3) 插入(insert)操作
    public static void insert() {
        conn = getConnection(); // 首先要获取连接,即连接到数据库
        try {
            String sql = "insert into account (name,password) values('lucy','123')"; // 插入数据的sql语句
            st = (Statement) conn.createStatement();    // 创建用于执行静态sql语句的Statement对象
            int count = st.executeUpdate(sql);  // 执行插入操作的sql语句,并返回插入数据的个数
            System.out.println("向account表中插入 " + count + " 条数据"); //输出插入操作的处理结果
            conn.close();   //关闭数据库连接
        } catch (SQLException e) {
            System.out.println("插入数据失败" + e.getMessage());
        }
    }

    //(4) 更新(update)操作
    public static void update() {
        conn = getConnection(); //同样先要获取连接,即连接到数据库
        try {
            String sql = "update account set password='0000' where name = '张三'";// 更新数据的sql语句
            st = (Statement) conn.createStatement();    //创建用于执行静态sql语句的Statement对象,st属局部变量
            int count = st.executeUpdate(sql);// 执行更新操作的sql语句,返回更新数据的个数
            System.out.println("account表中更新 " + count + " 条数据");      //输出更新操作的处理结果
            conn.close();   //关闭数据库连接
        } catch (SQLException e) {
            System.out.println("更新数据失败");
        }
    }

    //(5)查询(query)操作
    public static void query() {
        conn = getConnection(); //同样先要获取连接,即连接到数据库
        try {
            String sql = "select * from account";     // 查询数据的sql语句
            st = (Statement) conn.createStatement();    //创建用于执行静态sql语句的Statement对象,st属局部变量
            ResultSet rs = st.executeQuery(sql);    //执行sql查询语句,返回查询数据的结果集
            System.out.println("最后的查询结果为:");
            while (rs.next()) { // 判断是否还有下一个数据
                // 根据字段名获取相应的值
                String name = rs.getString("name");
                String password = rs.getString("password");
                //输出查到的记录的各个字段的值
                System.out.println(name + " " + password + " ");
            }
            conn.close();   //关闭数据库连接
        } catch (SQLException e) {
            System.out.println("查询数据失败");
        }
    }
    //(6)删除(delete)操作
        public static void delete () {
            conn = getConnection(); //同样先要获取连接,即连接到数据库
            try {
                String sql = "delete from account  where name = '李四'";// 删除数据的sql语句
                st = (Statement) conn.createStatement();    //创建用于执行静态sql语句的Statement对象,st属局部变量
                int count = st.executeUpdate(sql);// 执行sql删除语句,返回删除数据的数量
                System.out.println("account表中删除 " + count + " 条数据\n");    //输出删除操作的处理结果
                conn.close();   //关闭数据库连接
            } catch (SQLException e) {
                System.out.println("删除数据失败");
            }

    }
}

如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)
🐱 3.回到 datagrip 查看 account 表的数据,发现表的数据成功被更新:
如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)


3 JDBC进阶实验——简易登录界面

3.1 具体实现

🐰 1. MyConnection类,实现数据库连接:
Tips:同样别忘记将“你的密码”改成你的数据库密码哦!

package JDBC_test3;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


/**
 * @author 小黄小黄不再迷茫
 * @version 1.0
 */
public class MyConnection {
    public static Connection getConnection() {
        String driver = "com.mysql.cj.jdbc.Driver";//使用Jar包驱动
        String url = "jdbc:mysql://localhost:3306/myuser?serverTimezone=UTC";//链接数据库端口,数据库名
        String username = "root";//数据库用户名
        String password = "你的密码";//数据库密码
        Connection conn = null;
        try {
            Class.forName(driver); //classLoader,加载对应驱动
            conn = (Connection) DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {//异常捕获
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

}

🐦 2. Login 类,实现登录界面:

package JDBC_test3;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 1. @author 小黄小黄不再迷茫
 2. @version 1.0
 */
public class Login  extends JFrame{

    private JLabel JLname;
    private JLabel JLpwd;
    private JTextField JTname;
    private JPasswordField JTpwd;
    private JButton JBsure;
    private JButton JBexit;

    public Login(String title){
        super(title);
        JLname = new JLabel("用户名:");//设置Label和按钮名
        JLpwd = new JLabel("密  码:");
        JTname = new JTextField(20);
        JTpwd = new JPasswordField(20);
        JBsure = new JButton("确定");
        JBexit = new JButton("取消");

        JLname.setBounds(40, 40, 60, 25);//设置Label和按钮大小
        JTname.setBounds(100, 40, 170, 25);
        JLpwd.setBounds(40,80,60,25);
        JTpwd.setBounds(100,80,170,25);
        JBsure.setBounds(110,130,60,25);
        JBexit.setBounds(180,130,60,25);


        this.setLayout(null);
        this.add(JLname);
        this.add(JTname);
        this.add(JLpwd);
        this.add(JTpwd);
        this.add(JBsure);
        this.add(JBexit);

        JBsure.addActionListener(new ActionListener(){//添加按钮监听

            public void actionPerformed(ActionEvent arg0) {
                dispose();
                loginCheak(JTname,JTpwd);
            }
        });

        JBexit.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {

                System.exit(0);
            }

        });

    }

    public void loginCheak(JTextField tf,JPasswordField pf) {
        String username = tf.getText();
        String password = String.valueOf(pf.getPassword());
        System.out.println(password);//输出填写的密码

        if("".equals(username)){//判断用户名是否为空
            JOptionPane.showMessageDialog(null,"账号不能为空","Warning",JOptionPane.WARNING_MESSAGE);
            return;
        }
        if("".equals(password)){//判断密码是否为空
            JOptionPane.showMessageDialog(null,"密码不能为空","Warning",JOptionPane.WARNING_MESSAGE);
            return;
        }
        try{
            new MyConnection();
            Connection con = MyConnection.getConnection() ;//调用MyConnection.java中的getConnection方法
            Statement stmt=con.createStatement();
            String sql = "select * from account where name = '" + username + "' and password = '" + password + "'"; //SQL选择查询语句
            ResultSet rs=stmt.executeQuery(sql);

            if (rs.next()) {
                JOptionPane.showMessageDialog(this, "成功登录", "提示",  JOptionPane.INFORMATION_MESSAGE);
                this.dispose();
            }
            else {
                JOptionPane.showMessageDialog(this, "帐号或密码错误!", "警告",  JOptionPane.WARNING_MESSAGE);
                pf.requestFocus();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static void main (String []args){//主函数
        Login ft=new Login("欢迎登陆");
        ft.setSize(340, 240);
        ft.setLocation(300, 300);
        ft.setVisible(true);
        ft.setResizable(false);
    }
}

3.2 效果展示

  1. 登录界面展示,用户名和密码依次输入 张三、0000:
    如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)

  2. 点击确定,提示登录成功:
    如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)

  3. 重新运行,输入张三和一个错误密码,提示登录失败:
    如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)

  4. 直接点击登录,提示用户名不能为空:
    如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)


写在最后

🌟以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞 + 关注,非常感谢 ❤️ ❤️ ❤️ !
如果有问题,欢迎私信或者评论区!
如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)

共勉:“你间歇性的努力和蒙混过日子,都是对之前努力的清零。”
如何通过JDBC访问MySQL数据库?手把手实现登录界面(图解+完整代码)

相关文章

暂无评论

暂无评论...