1.实体层:com.java.model;
先在实体层model里新建一个User类,封装了一些User的信息、get set方法以及构造方法:
package com.java.model;
public class User {
// 编号
private int id;
// 用户名
private String userName;
// 密码
private String passWord;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String userName, String passWord) {
super();
this.userName = userName;
this.passWord = passWord;
}
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;
}
}
2.数据访问层:com.java.dao;
我们先在数据库db_book里面新建一个t_user表,存储了登录界面的用户名和密码信息:
在数据访问层Dao里面新建用户的数据访问类UserDao,主要是登录验证的信息:
package com.java.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.java.model.User;
public class UserDao {
/**
* 登录验证
*
* @param con
* @param user
* @return
* @throws Exception
*/
public User login(Connection con, User user) throws Exception {
// 登录正确,返回用户的所有实体信息
User resultUser = null;
String sql = "select * from t_user where userName=? and passWord=?";
// 获取PreparedStatement接口
PreparedStatement pstmt = con.prepareStatement(sql);
// 设置未知量的值
pstmt.setString(1, user.getUserName());
pstmt.setString(2, user.getPassWord());
// 返回ResultSet结果集
ResultSet rs = pstmt.executeQuery();
// rs.next()指向表中第一行数据 若第一行有效,则返回true,并继续指向第二行
if (rs.next()) {
// 对用户进行实例化,取其中的set方法;
resultUser = new User();
// 取第一行id这个属性的数据,将结果返回给User实体的信息
resultUser.setId(rs.getInt("id"));
// 取第一行UserName这个属性的数据,将结果返回给User实体的信息
resultUser.setUserName(rs.getString("userName"));
// 取第一行PassWord这个属性的数据,将结果返回给User实体的信息
resultUser.setPassWord(rs.getString("passWord"));
}
return resultUser;
}
}
3.视图层:com.java.view;
在视图层里面写登录的界面,这里要用到WindowBuilder这个插件;
在view里面新建一个LogOnFrm类:右键点击view包->new->Other->WindowBuilder->Swing Designer->JFrame类;
建好以后在Designer上面添加一些功能控件:
这里都是一些基本的控件和按钮,图标可以用我们之前的images包里面导入的图标;
给JTextField框进行重命名,命名为:userName_txt;
给JPasswordFiled框进行重命名,命名为: passWord_txt;
控件功能代码:
(1) 首先是重置按钮功能:
右键重置按钮->Add event handler->action->actionPerformed;
然后会在Source里面自动生成一个方法:
这里我们在actionPerformed()方法里面写一个resetValueActionPerformed(e)方法,
将实现重置的代码写在这个方法里面,并将方法的定义写在系统自动生成的actionPerformed()方法的外部;
用快捷方式(第四个)可以自动生成该方法对应的函数体:
在方法体里面,我们写上如下代码:
/**
* 重置事件处理
*
*/
private void resetValueActionPerformed(ActionEvent evt) {
// 将用户名和密码都设置为空
this.userName_txt.setText("");
this.passWord_txt.setText("");
}
用文本自带的setText方法将框里面的内容设置为空!这样就可以了;
(2)登录功能按钮:
右键登录按钮->Add event handler->action->actionPerformed;
然后会在Source里面自动生成一个方法:
这里我们在actionPerformed()方法里面写一个loginActionPerformed(e)方法,
将实现重置的代码写在这个方法里面,并将方法的定义写在系统自动生成的actionPerformed()方法的外部;
用快捷方式(第四个)可以自动生成该方法对应的函数体:
在方法体里面,我们写上如下代码:
首先要判断用户输入的用户名和密码是否为空;
// 从界面获取用户名和密码
String userName = this.userName_txt.getText();
String passWord = new String(this.passWord_txt.getPassword());
// 判断用户名和密码是否为空
if (StringUtil.isEmpty(userName)) {
JOptionPane.showMessageDialog(null, "用户名不能为空!");
return;// 结束方法,不再继续执行
}
if (StringUtil.isEmpty(passWord)) {
JOptionPane.showMessageDialog(null, "密码不能为空!");
return;
}
当然,这里我们要写一个判断字符串是否为空的StringUtil工具类(写在com.java.util包里面):
package com.java.util;
public class StringUtil {
/**
* 判断是否为空
*
* @param str
* @return
*/
public static boolean isEmpty(String str) {
if (str == null || "".equals(str.trim())) {
return true;
} else {
return false;
}
}
/**
* 判断是否不是空
*/
public static boolean isNotEmpty(String str) {
if (str != null && "".equals(str.trim())) {
return true;
} else {
return false;
}
}
}
再连接一下数据库 :
// 进行数据库连接
User user=new User(userName,passWord);
Connection con = null;
try {
con=dbUtil.getCon();
/**
* 将从数据库中获取的用户信息保存在currentUser里面,
* 若为null,则表示从数据库里获取的信息和从用户登陆界面获取的信息不一致,
* 即登录失败
*/
User currentUser=userDao.login(con, user);
if(currentUser!=null){
JOptionPane.showMessageDialog(null, "登录成功!");
}else{
JOptionPane.showMessageDialog(null, "用户名或密码错误!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
即loginActionPerformed(e)方法体里面的代码为:
/**
* 登录事件处理
*
*/
private void loginActionPerformed(ActionEvent evt) {
// 从界面获取用户名和密码
String userName = this.userName_txt.getText();
String passWord = new String(this.passWord_txt.getPassword());
// 判断用户名和密码是否为空
if (StringUtil.isEmpty(userName)) {
JOptionPane.showMessageDialog(null, "用户名不能为空!");
return;// 结束方法,不再继续执行
}
if (StringUtil.isEmpty(passWord)) {
JOptionPane.showMessageDialog(null, "密码不能为空!");
return;
}
// 进行数据库连接
User user=new User(userName,passWord);
Connection con = null;
try {
con=dbUtil.getCon();
/**
* 将从数据库中获取的用户信息保存在currentUser里面,
* 若为null,则表示从数据库里获取的信息和从用户登陆界面获取的信息不一致,
* 即登录失败
*/
User currentUser=userDao.login(con, user);
if(currentUser!=null){
JOptionPane.showMessageDialog(null, "登录成功!");
}else{
JOptionPane.showMessageDialog(null, "用户名或密码错误!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
4.测试环节;
点开LogOnFrm类,运行这个类:
运行成功!
到这里,管理员的登录界面就完结了!