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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 文章目录写在前面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 包

首先进入 Mysql 下载官网: https://www.mysql.com/downloads/,将页面滑动到底端,点击 MySQL Community (GPL) Downloads


选择 Connector/J



选择 General Availability(GA) Releases,在 Select Operating System 下拉列表选择 Platform Independent,然后选择任意一种压缩包格式的文件 Download,根据提示下载,如果需要其他版本,可以点击 Archives



下载完成后进行解压,即可在当前文件夹中看到下载好的 jar 包了。



打开 idea 创建一个项目 JDBC 并创建 Moudle JDBCtest,在该模块下创建个目录 lib,并将刚刚下载好的 jar 包拷贝过来。


‘’

右键将 jar 包, Add as Library



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');



2 JDBC基础实验

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

🐻 1. 先创建项目、包及 Test.java,如下图所示:



🐦 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();
        }
    }
}



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

🐰 1. 创建如下包、类:



🐦 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("删除数据失败");
            }
    }
}



🐱 3.回到 datagrip 查看 account 表的数据,发现表的数据成功被更新:




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 效果展示

登录界面展示,用户名和密码依次输入 张三、0000:




点击确定,提示登录成功:




重新运行,输入张三和一个错误密码,提示登录失败:




直接点击登录,提示用户名不能为空:

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
3
分享
相关文章
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
270 11
无代码革命:10分钟打造企业专属数据库查询AI机器人
0 代码改造实现应用运行时数据库密码无损轮转
本文探讨了敏感数据的安全风险及降低账密泄漏风险的策略。国家颁布的《网络安全二级等保2.0标准》强调了企业数据安全的重要性。文章介绍了Nacos作为配置中心在提升数据库访问安全性方面的应用,并结合阿里云KMS、Druid连接池和Spring Cloud Alibaba社区推出的数据源动态轮转方案。该方案实现了加密配置统一托管、帐密全托管、双层权限管控等功能,将帐密切换时间从数小时优化到一秒,显著提升了安全性和效率。未来,MSE Nacos和KMS将扩展至更多组件如NoSQL、MQ等,提供一站式安全服务,助力AI时代的应用安全。
151 14
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
65 4
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
代码采纳率从 22% 到 33%,通义灵码辅助数据库智能编码实践
通义灵码本质上是一个AI agent,它已经进行了大量的优化。然而,为了更完美或有效地调用模型的潜在能力,我们在使用时仍需掌握一些技巧。通常,大多数人在使用通义灵码时会直接上手,这是 AI agent 的一个优势,即 zero shot 使用,无需任何上下文即可直接使用通义灵码的能力。
0代码改动实现Spring应用数据库帐密自动轮转
Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
281 6
|
6月前
|
陪玩平台中支付与结算模块的代码,陪玩系统数据库设计与代码实现
第三方支付平台对接涉及与微信支付、支付宝等API接口的调用,确保用户支付流程顺畅。结算模块根据业务规则计算陪玩师收益,强调安全性、异常处理、可扩展性和日志记录。数据库设计涵盖用户、陪玩者、订单等信息的存储管理,确保系统稳定运行。
187 12
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
753 2

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问