GUI用户登录
用户登录界面
功能实现要利用JDBC操作数据库
登录成功,弹出消息框提示用户 - 欢迎登录系统~
登录失败,弹出消息框提示用户 - 用户名或密码错误!
要求采用MVC架构
(一)编程实现
1、创建数据库和表
(1)创建学生数据库
执行命令:CREATE DATABASE student CHARSET=‘utf8mb4’
(2)创建用户表
执行命令:USE student,打开student数据库
创建用户表 - t_user
CREATE TABLE t_user
(
id
int(11) NOT NULL AUTO_INCREMENT COMMENT ‘用户ID’,
username
varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘用户名’,
password
varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘用户密码’,
telephone
varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘联系电话’,
register_time
timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘注册时间’,
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4;
执行语句,查看结果
插入三条用户记录
INSERT INTO t_user (username, password, telephone, register_time) VALUES (‘admin’, ‘12345’, ‘13945456780’, ‘2022-01-01 09:10:34’);
INSERT INTO t_user (username, password, telephone, register_time) VALUES (‘brown’, ‘11111’, ‘13878789089’, ‘2022-03-12 19:05:44’);
INSERT INTO t_user (username, password, telephone, register_time) VALUES (‘alice’, ‘22222’, ‘15834345670’, ‘2022-04-04 15:16:24’);
执行语句,查看结果
查看用户表记录
一条用户记录对应一个用户实体,这是一个映射
2、创建用户实体类
在net.nieyourong.p03.t09.bean包里创建User类
package net.nieyourong.p03.t09.bean;
import java.util.Date;
public class User {
private int id;
private String username;
private String password;
private String telephone;
private Date registerTime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public Date getRegisterTime() {
return registerTime;
}
public void setRegisterTime(Date registerTime) {
this.registerTime = registerTime;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", telephone='" + telephone + '\'' +
", registerTime=" + registerTime +
'}';
}
}
3、添加数据库驱动程序包
在项目根目录创建libs目录,添加数据库驱动程序包
此时,这个jar包还不能被项目使用,需要作为库添加到项目里
单击【Add as Library】菜单项
此时,数据库驱动程序包就可以被项目使用了
查看JDBC重要的接口和类
4、创建数据库连接管理类
创建net.nieyourong.p03.t09.dbutils包,在包里创建ConnectionManager类
package net.nieyourong.p03.t09.dbutils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionManager {
//数据库连接属性
private static final String DRIVER = “com.mysql.jdbc.Driver”;
private static final String URL = “jdbc:mysql://localhost:3306/student?useSSL=false”;
private static final String USER = “root”;
private static final String PASSWORD = “p@ssw0rd”;//改成自己数据库的密码
/**
* 私有化构造方法,拒绝实例化
*/
private ConnectionManager() {
}
/**
* 获取数据库连接静态方法
*
* @return 数据库连接
*/
public static Connection getConnection() {
//定义数据库连接
Connection conn = null;
//安装数据库驱动
try {
//安装数据库驱动
Class.forName(DRIVER);
//获取数据库连接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
//提示用户数据库连接成功
System.out.println("提示:数据库连接成功~");
} catch (ClassNotFoundException e) {
System.err.println("异常:数据库驱动程序未找到");
} catch (SQLException e) {
System.err.println("异常:数据库连接失败");
e.printStackTrace();
}
//返回数据库连接
return conn;
}
/**
* 关闭数据库连接静态方法
* @param conn
*/
public static void closeConnection(Connection conn) {
//判断连接是否为空
if (conn != null) {
try {
//判断连接是否关闭
if (!conn.isClosed()) {
//关闭数据库连接,释放资源
conn.close();
//提示用户
System.out.println("提示:数据库连接关闭!");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
//获取数据库连接
Connection conn = getConnection();
//关闭数据库连接
closeConnection(conn);
}
}
运行程序,查看结果
故意把DRIVER改成小写的,就会抛出异常被捕获
5、创建用户数据访问接口
在net.nieyourong.p03.t09.dao包里创建UserDao接口
package net.nieyourong.p03.t09.dao;
import net.nieyourong.p03.t09.bean.User;
import java.util.List;
public interface UserDao {
int insert(User user);
int delete(int id);
int update(User user);
int findById(int id);
List findAll();
User login(String username, String password);
}
6、创建用户数据访问接口实现类
在net.nieyourong.p03.t09.dao.impl包里创建UserDaoImpl类
UserDaoImpl类实现UserDao接口,就要去实现接口里的抽象方法
默认是全选
单击【OK】按钮
package net.nieyourong.p03.t09.dao.impl;
import net.nieyourong.p03.t09.bean.User;
import net.nieyourong.p03.t09.dao.UserDao;
import java.util.List;
public class UserDaolmpl implements UserDao {
@Override
public int insert(User user) {
return 0;
}
@Override
public int delete(int id) {
return 0;
}
@Override
public int update(User user) {
return 0;
}
@Override
public int findById(int id) {
return 0;
}
@Override
public List<User> findAll() {
return null;
}
}
接下来,我们编写登录方法
@Override
public User login(String username, String password) {
//定义用户对象
User user = null;
//获取数据库连接
Connection conn = ConnectionManager.getConnection();
//创建SQL字符串
String strSQL = "select * from t_user where username = ? and password = ?";
try {
//创建预备语句对象(准备提供参数)
PreparedStatement pstmt = conn.prepareStatement(strSQL);
//用参数值去设置占位符的值
pstmt.setString(1,username);
pstmt.setString(2,password);
//执行SQL查询,返回结果集
ResultSet rs = pstmt.executeQuery();
//遍历结果集,用记录值填充用户对象
while (rs.next()) {
//创建用户对象
user = new User();
//用户当前记录字段值设置用户对象属性值
user.setId(rs.getInt("id"));
user.setUsername(rs.getNString("username"));
user.setPassword(rs.getNString("password"));
user.setTelephone(rs.getNString("telephone"));
user.setRegisterTime(rs.getTimestamp("register_time"));
}
} catch (SQLException e) {
System.err.println(e.getMessage());
}
//返回用户对象
return user;
}
在net.nieyourong.p03.t09.test包里创建TestUserDaoImpl类
package net.nieyourong.p03.t09.test;
import net.nieyourong.p03.t09.bean.User;
import net.nieyourong.p03.t09.dao.UserDao;
import net.nieyourong.p03.t09.dao.impl.UserDaolmpl;
import org.junit.Test;
public class TestUserDaolmpl {
@Test
public void testLogin() {
String username = “admin”;
String password = “12345”;
UserDao dao = new UserDaolmpl();
User user = dao.login(username, password);
if (user != null) {
System.out.println("恭喜,[" + username + "]登录成功~");
}else {
System.out.println("遗憾,[" + username + "]登录失败~");
}
}
}
运行testLogin()测试方法
修改密码:123456