學習做學生管理系統——java swing+Mysql 第二章(登錄功能)

看本章內容前先看上一章內容
上一章內容:
學習做學生管理系統——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();
	}
}

下一章正在製作了,這一章如有錯誤可以評論說一下,當然如果有更好的方法也可以在下方評論告訴我,非常感謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章