【JDBC从入门到实战|如何通过JDBC访问MySQL数据库(手把手实现登录界面(图解+完整代码))】 个人主页:黄小黄的博客主页写在前面 ?本文环境:
?? 支持我: 点赞 收藏 关注
格言:一步一个脚印才能承接所谓的幸运
本文来自专栏:JDBC从入门到实战
欢迎点击支持订阅专栏 ??
文章图片
jdk1.8
、mysql8.0
、IntelliJ IDEA 2021.3
与DataGrip 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 包
- 首先进入 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
文章图片
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 accountwhere 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 Loginextends 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:
文章图片
- 点击确定,提示登录成功:
文章图片
- 重新运行,输入张三和一个错误密码,提示登录失败:
文章图片
- 直接点击登录,提示用户名不能为空:
文章图片
如果有问题,欢迎私信或者评论区!
文章图片
共勉:“你间歇性的努力和蒙混过日子,都是对之前努力的清零。”
文章图片
推荐阅读
- JavaSwing项目|基于Eclipse+Java+Swing+Mysql实现旅游管理信息系统
- kubernetes|CC00095.CloudKubernetes——|KuberNetes&二进制升级.V06|——|kubernetes组件|calico.v3.15.3——>v3.19.1|
- Windows|Maven项目POM文件参数详解
- 分布式|《SpringCloud 微服务实战 》 第1章(基础知识)
- Java之路|2020年Spring Boot面试都问了什么((含答案解析))
- Java专题|【校招VIP】Java Spring之spring boot
- 刷题总结|面试考点(二)——Spring boot启动流程
- java|Spring Boot 面试杀手锏(自动配置原)
- spring|Spring Boot 面试杀手锏(自动配置原理)