看本章內容前先看上一章內容
上一章內容:
學習做學生管理系統——java swing+Mysql 第一章
這一次是在上一章的基礎上,編寫登錄按鈕功能
主要進行兩種功能:一.判斷帳號密碼是否正確
A.帳號密碼錯誤時,給錯誤提示框
B.帳號密碼正確時,給正確提示框(後續章節在補充新功能)
二.帳號密碼爲空時,給錯誤提示框
在編寫代碼時,先確保自己引入了mysql,如果沒有引入
看這篇文章引入Mysql
當引入了相應的JDBC,這時候就需要了解一下怎麼連接Mysql,這裏我就引入菜鳥教程的鏈接
菜鳥教程鏈接
主要了解一下怎麼連接數據庫(可以根據自己的需求,繼續深入研究)
如果想快速瞭解連接數據庫,可以看這裏的簡短代碼
建立連接所必須的介質
static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; //這裏可以不用改動
static final String DB_URL = "jdbc:mysql://localhost:3306/StudentManage?useSSL=false&serverTimezone=UTC";
//StudentManage是庫的名字
static final String USER = "root";//連接用的賬戶名
static final String PASS = "123";//密碼
剩下的功能則放在按鈕觸發來實現
一、判斷是否正確
當你連接了數據庫,就有了可以實現查詢的功能,只需要把帳號和密碼的信息放進數據庫裏面的表,然後在代碼中實現一個在表中查詢的功能,即可實現判斷正確
接下來說說實現過程
要查詢表,就需要信息,這時候就要從第一章創建的帳號框和密碼框讀取輸入的信息
程序當然不會在你輸入信息的時候就懂得要查詢,就要給第一章原先添加的登錄按鈕添加一個
觸發(我的觸發是按照第一章的內容來設置的,所以我就將觸發的函數直接寫在login()的函數中)
loginButton.addActionListener(new ActionListener() {
});//loginButton是設置的登錄按鈕的名字
登錄所要完成的功能就會寫在這個函數裏面
寫完觸發框架,就要在裏面添加觸發後所需要的功能函數框架
loginButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
寫完框架後,就把功能放進框架中,從讀取信息開始
下面這段代碼實現的就是讀取帳號框和密碼框的內容
String s1=text1.getText().toString();
String s2=new String(text2.getPassword());
接下來就是數據庫的連接,剛剛我們已經完成了連接介質的準備,這時候就是讓他進行連接了。
Connection c=null;
PreparedStatement stmt=null;
定義完,這時候就用try-catch組合來寫連接
try {
Class.forName(JDBC_DRIVER);
c = DriverManager.getConnection(DB_URL,USER,PASS);//連接數據庫
} catch ( Exception e1 ) {
System.err.println( e1.getClass().getName() + ": " + e1.getMessage() );
System.exit(0);
}
搜索帳號密碼的功能就寫在try裏面
try {
Class.forName(JDBC_DRIVER);
c = DriverManager.getConnection(DB_URL,USER,PASS);//連接數據庫
String sql1="SELECT * FROM account where user=? and password=?";//數據庫的查詢
stmt=c.prepareStatement(sql1);//prepareStatement方法可以自行百度,這裏就不詳細解答了
stmt.setString(1, s1);//1,s1,第一個爲第一個問號的位置,第二個爲第二個問號的位置
stmt.setString(2, s2);//跟上面同理
//setString的主要目的是把帳號密碼的信息放進sql1裏面進行指定內容的查詢
ResultSet rs = stmt.executeQuery();//將結果放進rs中
} catch ( Exception e1 ) {
System.err.println( e1.getClass().getName() + ": " + e1.getMessage() );
System.exit(0);
}
寫完查詢的功能,就要給他上色,當帳號密碼正確的時候有提示框告訴你正確了,錯誤的時候也有提示框告訴你錯誤,提示框的相關內容就要有關JOptionPane類了
if這段代碼跟在ResultSet rs = stmt.executeQuery();後面
if(s1.length()!=0&&s2.length()!=0) {
if(rs.next()) {
JOptionPane.showMessageDialog(null, "登陸成功");
}
else{
JOptionPane.showMessageDialog(null, "帳號或密碼有誤", "錯誤", ERROR_MESSAGE);
}
}
寫完判斷,就是執行完功能了,這時候就要進行連接的關閉
這些都是寫在try函數的最後的。用於關閉數據庫的連接
rs.close();
stmt.close();
c.close();
判斷是否輸入帳號密碼
當帳號密碼,有一個沒有輸入或者都沒有輸入的情況下,要提示使用者輸入完全,這時候回到前面的if的那段代碼
if(s1.length()!=0&&s2.length()!=0) {
if(rs.next()) {
JOptionPane.showMessageDialog(null, "登陸成功");
}
else{
JOptionPane.showMessageDialog(null, "帳號或密碼有誤", "錯誤", ERROR_MESSAGE);
}
}
我們只需要在這裏面改變成if-else嵌套就可以完成這個判斷的功能
代碼如下
if(s1.length()!=0&&s2.length()!=0) {
if(rs.next()) {
JOptionPane.showMessageDialog(null, "登陸成功");
}
else{
JOptionPane.showMessageDialog(null, "帳號或密碼有誤", "錯誤", ERROR_MESSAGE);
}
}else if(s1.length()==0||s2.length()==0) {
JOptionPane.showMessageDialog(null, "請輸入帳號或密碼", "錯誤", ERROR_MESSAGE);
}
效果圖
最後整合第一章的代碼
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.sql.*;
public class main {
static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/StudentManage?useSSL=false&serverTimezone=UTC";
static final String USER = "root";
static final String PASS = "123";
private static void login(){
JFrame jf=new JFrame("學生管理系統登錄界面");//登錄主界面
jf.setSize(350, 200);
JPanel jp=new JPanel();//製作界面
jf.add(jp);
jp.setLayout(null);
JLabel acc=new JLabel("帳號");//帳號
JLabel pass=new JLabel("密碼");//密碼
jp.add(pass);
jp.add(acc);
acc.setBounds(50,20,80,25);
pass.setBounds(50,50,80,25);
JTextField text1=new JTextField();//帳號輸入
text1.setBounds(110, 20, 165, 25);
jp.add(text1);
JPasswordField text2=new JPasswordField();//密碼輸入
text2.setBounds(110, 50, 165, 25);
jp.add(text2);
JButton loginButton=new JButton("登錄");//登錄按鈕
loginButton.setBounds(120, 100, 80, 25);
jp.add(loginButton);
JButton regButton=new JButton("註冊");//註冊按鈕
regButton.setBounds(220, 100, 80, 25);
jp.add(regButton);
jf.setVisible(true);
loginButton.addActionListener(new ActionListener() {
private int ERROR_MESSAGE;
public void actionPerformed(ActionEvent e) {
String s1=text1.getText().toString();
String s2=new String(text2.getPassword());
Connection c=null;
PreparedStatement stmt=null;
try {
Class.forName(JDBC_DRIVER);
c = DriverManager.getConnection(DB_URL,USER,PASS);
String sql1="SELECT * FROM account where user=? and password=?";
stmt=c.prepareStatement(sql1);
stmt.setString(1, s1);
stmt.setString(2, s2);
ResultSet rs = stmt.executeQuery();
if(s1.length()!=0&&s2.length()!=0) {
if(rs.next()) {
JOptionPane.showMessageDialog(null, "登陸成功");
}
else{
JOptionPane.showMessageDialog(null, "帳號或密碼有誤", "錯誤", ERROR_MESSAGE);
}
}else if(s1.length()==0||s2.length()==0) {
JOptionPane.showMessageDialog(null, "請輸入帳號或密碼", "錯誤", ERROR_MESSAGE);
}
rs.close();
stmt.close();
c.close();
} catch ( Exception e1 ) {
System.err.println( e1.getClass().getName() + ": " + e1.getMessage() );
System.exit(0);
}
}
});
}
public static void main(String[] args) {
login();
}
}
下一章正在製作了,這一章如有錯誤可以評論說一下,當然如果有更好的方法也可以在下方評論告訴我,非常感謝。