1、JWT註冊窗口
package bysj_wzc.cilent;
import java.awt.*;
import javax.swing.*;
import bysj_wzc.cilent.ClientReadAndPrint.OpenRegisterListen;
//註冊類
public class Register {
JTextField textField = null;
JPasswordField pwdField = null;
ClientReadAndPrint.RegisterListen listener=null;
ClientReadAndPrint.OpenLoginListen openLgLt=null;
// 構造函數
public Register() {
init();
}
void init() {
JFrame jf = new JFrame("註冊");
jf.setBounds(500, 250, 310, 210);
jf.setResizable(false); // 設置是否縮放
JPanel jp1 = new JPanel();
JLabel headJLabel = new JLabel("註冊界面");
headJLabel.setFont(new Font(null, 0, 35)); // 設置文本的字體類型、樣式 和 大小
jp1.add(headJLabel);
JPanel jp2 = new JPanel();
JLabel nameJLabel = new JLabel("用户名:");
textField = new JTextField(20);
JLabel pwdJLabel = new JLabel("密碼: ");
pwdField = new JPasswordField(20);
JButton registerBtn = new JButton("註冊");
JButton loginBtn = new JButton("有賬號?登錄");
jp2.add(nameJLabel);
jp2.add(textField);
jp2.add(pwdJLabel);
jp2.add(pwdField);
jp2.add(registerBtn);
jp2.add(loginBtn);
JPanel jp = new JPanel(new BorderLayout()); // BorderLayout佈局
jp.add(jp1, BorderLayout.NORTH);
jp.add(jp2, BorderLayout.CENTER);
// 設置監控
listener = new ClientReadAndPrint().new RegisterListen(); // 新建監聽類
listener.setJTextField(textField); // 調用PoliceListen類的方法
listener.setJPasswordField(pwdField);
listener.setJFrame(jf);
pwdField.addActionListener(listener); // 密碼框添加監聽
registerBtn.addActionListener(listener); // 按鈕添加監聽
// 設置打開登錄監控
openLgLt = new ClientReadAndPrint().new OpenLoginListen(); // 新建監聽類
openLgLt.setJFrame(jf);
loginBtn.addActionListener(openLgLt); // 按鈕添加監聽
jf.add(jp);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 設置關閉圖標作用
jf.setVisible(true); // 設置可見
}
}
2、監聽類
/**********************註冊監聽(內部類)**********************/
class RegisterListen implements ActionListener{
JTextField textField;
JPasswordField pwdField;
JFrame registerJFrame; // 註冊窗口
Login login = null;
public void setJTextField(JTextField textField) {
this.textField = textField;
}
public void setJPasswordField(JPasswordField pwdField) {
this.pwdField = pwdField;
}
public void setJFrame(JFrame jFrame) {
this.registerJFrame = jFrame;
}
public void actionPerformed(ActionEvent event) {
userName = textField.getText();
String userPwd = String.valueOf(pwdField.getPassword()); // getPassword方法獲得char數組
//通過賬號密碼註冊
int i = DBUtils.addData(userName, userPwd);
if(i == -1) {
JOptionPane.showMessageDialog(registerJFrame, "已有此賬號,請勿重複註冊!", "提示", JOptionPane.WARNING_MESSAGE);
return;
}else if(i == 0) {
JOptionPane.showMessageDialog(registerJFrame, "註冊失敗,請查驗參數是否超過大小", "提示", JOptionPane.WARNING_MESSAGE);
return;
}else {
JOptionPane.showMessageDialog(registerJFrame, "添加成功!", "提示", JOptionPane.WARNING_MESSAGE);
}
try {
Thread.sleep(1500);
}catch(Exception e) {
e.printStackTrace();
}
login = new Login(); // 新建登錄窗口
registerJFrame.setVisible(false); // 隱藏註冊窗口
}
}
/**********************切換註冊頁面監聽(內部類)**********************/
class OpenRegisterListen implements ActionListener{
JTextField textField;
JPasswordField pwdField;
JFrame loginJFrame; // 登錄窗口
Register register = null;
public void setJTextField(JTextField textField) {
this.textField = textField;
}
public void setJPasswordField(JPasswordField pwdField) {
this.pwdField = pwdField;
}
public void setJFrame(JFrame jFrame) {
this.loginJFrame = jFrame;
}
public void actionPerformed(ActionEvent event) {
register = new Register(); // 新建註冊窗口
loginJFrame.setVisible(false); // 隱藏登錄窗口
}
}
3、數據庫操作
package bysj_wzc.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class DBUtils {
// 加載數據庫驅動 com.mysql.jdbc.Driver
private static String dbdriver = "com.mysql.cj.jdbc.Driver"; //因為MySQL是8.0版本,所以需要加上cj,如果是5.0版本就不用
// 獲取mysql連接地址
private static String dburl = "jdbc:mysql://127.0.0.1:3306/databases?&useSSL=false&serverTimezone=UTC";
//這裏的&serverTimezone=UTC很重要,之前就是因為這個出錯
// 數據名稱
private static String username = "root";
// 數據庫密碼
private static String userpassword = "admin";
// 獲取一個數據的連接
public static Connection conn = null;
// 獲取連接的一個狀態
//下面是一個例子,其中database1是數據庫名,後面是一條查詢語句
public static void main(String[] args) throws SQLException {
System.out.println("進入");
// List<Object> x = getDataByNameAndPsd("1", "1");
int x = addData("44", "44");
System.out.println(x);
}
/**
* 獲取用户數據通過賬號
* @param userName 賬號
* @return
*/
public static List<Object> getDataByName(String userName) {
List<Object> data = getData("bysj",
"select * from user where user_name = ?", userName);
return data;
}
/**
* 獲取用户數據通過賬號和密碼
* @param userName 賬號
* @param password 密碼
* @return
*/
public static List<Object> getDataByNameAndPsd(String userName, String password) {
List<Object> data = getData("bysj",
"select * from user where user_name = ? and password = ?", userName, password);
return data;
}
/**
* 獲取用户數據通過賬號和密碼
* @param userName 賬號
* @param password 密碼
* @return
*/
public static int addData(String userName, String password) {
//先查詢數據庫是否已經有此賬號
List<Object> data = getDataByName(userName);
if(data != null && data.size() > 0) {
return -1;// -1 代表着數據庫已經有次賬號,無法繼續添加
}
/*執行插入*/
//獲取用户主鍵
String id = UUID.randomUUID().toString().replaceAll("-", "");
//執行添加方法
int count = operateData("bysj",
"insert into user(id, user_name, password) values(?,?,?)", id, userName, password);
return count;
}
/**
* 獲取數據庫連接
*
* @param mydbName
* @return
*/
private static Connection getConn(String mydbName) {
Connection conn = null;
try {
Class.forName(dbdriver);
String myjdbcUrl = dburl.replace("databases", mydbName);
conn = DriverManager.getConnection(myjdbcUrl, username, userpassword);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 關閉數據庫連接
*
* @param rs
* @param ps
* @param conn
*/
private static void closeAll(ResultSet rs, PreparedStatement ps,
Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn == null)
return;
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 查表,返回行的列表,每個列表中包含列的列表。
*
* @param dbName
* @param sql
* @return
*/
public static List<Object> getData(String dbName, String sql, String ...param) {
Connection conn = getConn(dbName);
PreparedStatement ps = null;
List<Object> list = new ArrayList<Object>();
ResultSet rs = null;
try {
ps = conn.prepareStatement(sql);
//如果有傳參
if(param != null) {
for(int i = 0;i < param.length;i++) {
ps.setString(i+1, param[i]);
}
}
rs = ps.executeQuery();
ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
while (rs.next()) {
for (int i = 1; i <= columnCount; ++i) {
Object o = rs.getObject(i) == null ? "" : rs.getObject(i);
list.add(o);
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeAll(rs, ps, conn);
}
return list;
}
/**
* 添加/修改數據
*
* @param dbName 數據庫名稱
* @param sql
* @return
*/
public static int operateData(String dbName, String sql, String ...param) {
Connection conn = getConn(dbName);
PreparedStatement ps = null;
int rs = 0;
try {
ps = conn.prepareStatement(sql);
//如果有傳參
if(param != null) {
for(int i = 0;i < param.length;i++) {
ps.setString(i+1, param[i]);
}
}
rs = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return rs;
}
}