零、本講學習目標
1、學會分析“用戶登錄”任務結合JDBC技術改寫的實現思路
2、根據思路獨立完成連接數據庫版本的“用戶登錄”任務
一、圖形界面“用戶登錄”實現思路
- 第30講的用戶登錄程序,實現了圖形用戶界面,但是用於判斷用戶是否合法的用戶名與密碼是在程序裏寫死了的,並不是連接數據庫之後通過查詢用戶表來判斷是否存在用戶記錄。
- 創建用戶數據訪問對象類UserDao,提供一個登錄方法:
boolean login(String username, String password)
,如果輸入的用戶名和密碼能在用戶表裏查詢到相應記錄,則返回true
,否則返回false
。
- 利用login()方法來改寫LoginFrame類的登錄按鈕單擊事件處理方法
- 爲了封裝用戶表記錄數據,要創建用戶實體類User
- 爲了更好地獲取和關閉數據庫連接,要創建數據庫連接管理類ConnectionManager
二、圖形界面“用戶登錄”實現步驟
1、創建用戶實體類
- 創建用戶實體類User
package net.hw.lesson32;
import java.sql.Timestamp;
public class User {
private int id;
private String username;
private String password;
private String telephone;
private Timestamp 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 Timestamp getRegisterTime() {
return registerTime;
}
public void setRegisterTime(Timestamp registerTime) {
this.registerTime = registerTime;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", telephone='" + telephone + '\'' +
", registerTime=" + registerTime +
'}';
}
}
3、創建數據庫連接管理類
- 創建數據庫連接管理類ConnectionManager
package net.hw.lesson32;
import javax.swing.*;
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";
private static final String USERNAME = "root";
private static final String PASSWORD = "root";
private ConnectionManager() {
}
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (ClassNotFoundException e) {
System.err.println("錯誤提示:數據庫驅動程序未找到!");
} catch (SQLException e) {
System.err.println("溫馨提示:數據庫連接失敗!");
}
return conn;
}
public static void closeConnection(Connection conn) {
if (conn != null) {
try {
if (!conn.isClosed()) {
conn.close();
}
} catch (SQLException e) {
System.err.println("溫馨提示:數據庫連接關閉失敗!");
}
}
}
public static void main(String[] args) {
Connection conn = getConnection();
if (conn != null) {
JOptionPane.showMessageDialog(null, "恭喜,數據庫連接成功!");
} else {
JOptionPane.showMessageDialog(null, "遺憾,數據庫連接失敗!");
}
closeConnection(conn);
}
}
- 運行程序,查看結果
3、創建用戶數據訪問對象類
- 創建用戶數據訪問對象類UserDao
package net.hw.lesson32;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDao {
public boolean login(String username, String password) {
Connection conn = ConnectionManager.getConnection();
try {
String strSQL = "select * from t_user where username = ? and password = ?";
PreparedStatement pstmt = conn.prepareStatement(strSQL);
pstmt.setString(1, username);
pstmt.setString(2, password);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
return true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
ConnectionManager.closeConnection(conn);
}
return false;
}
}
4、創建測試用戶數據訪問對象類
- 創建測試用戶數據訪問對象類TestUserDao
package net.hw.lesson32;
import java.util.Scanner;
public class TestUserDao {
public static void main(String[] args) {
String username;
String password;
Scanner sc = new Scanner(System.in);
UserDao userDao = new UserDao();
System.out.print("輸入用戶名:");
username = sc.next();
System.out.print("輸入密碼:");
password = sc.next();
if (userDao.login(username, password)) {
System.out.println("恭喜,登錄成功!");
} else {
System.err.println("遺憾,登錄失敗!");
}
}
}
- 運行程序,查看結果
- 再運行程序,查看結果
5、創建用戶登錄窗口類
- 創建用戶登錄窗口類LoginFrame
package net.hw.lesson32;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class LoginFrame extends JFrame {
public LoginFrame(String title) throws HeadlessException {
super(title);
initGUI();
}
private void initGUI() {
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel = (JPanel) getContentPane();
panel.setLayout(new GridLayout(3, 1));
panel.add(panel1);
panel.add(panel2);
panel.add(panel3);
JLabel lblUsername = new JLabel("用戶名:");
JTextField txtUsername = new JTextField(15);
panel1.add(lblUsername);
panel1.add(txtUsername);
JLabel lblPassword = new JLabel("密 碼:");
JPasswordField txtPassword = new JPasswordField(15);
panel2.add(lblPassword);
panel2.add(txtPassword);
JButton btnLogin = new JButton("登錄");
JButton btnCancel = new JButton("取消");
panel3.add(btnLogin);
panel3.add(btnCancel);
setBounds(200, 200, 300, 200);
setLocationRelativeTo(null);
pack();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btnCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
btnLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = txtUsername.getText().toString();
String password = new String(txtPassword.getPassword());
UserDao userDao = new UserDao();
if (userDao.login(username, password)) {
JOptionPane.showMessageDialog(LoginFrame.this,
"歡迎登錄系統!", "提示信息", JOptionPane.INFORMATION_MESSAGE);
LoginFrame.this.dispose();
} else {
JOptionPane.showMessageDialog(LoginFrame.this,
"用戶名或密碼有錯誤!", "提示信息", JOptionPane.ERROR_MESSAGE);
}
}
});
}
public static void main(String[] args) {
LoginFrame loginFrame = new LoginFrame("登錄窗口");
}
}
- 運行程序,查看結果
三、課後作業:完成用戶註冊窗口程序
- 在UserDao類裏添加添加用戶記錄的方法
public int insert(User user)
- 單擊【註冊】按鈕,利用窗口輸入的數據創建用戶對象,再調用UserDao對象的insert()方法,插入新註冊的用戶
- 註冊成功,彈出消息框“恭喜,註冊成功!”,關閉窗口
- 註冊失敗,彈出消息框“遺憾,註冊失敗”
- 單擊【取消】按鈕,關閉窗口