首頁(yè)技術(shù)文章正文

案例——使用JDBC實(shí)現(xiàn)QQ登錄

更新時(shí)間:2021-12-13 來源:黑馬程序員 瀏覽量:

在實(shí)際開發(fā)中,用戶信息是存放在數(shù)據(jù)庫(kù)中的,登錄時(shí)的賬號(hào)和密碼信息也需要去數(shù)據(jù)庫(kù)中查詢,本節(jié)將使用JDBC技術(shù)來完善QQ登錄案例。

1.創(chuàng)建數(shù)據(jù)表,并添加用戶數(shù)據(jù)


在jdbc數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)表tb_qquser,并在表中插入3條數(shù)據(jù),其執(zhí)行的SQL語(yǔ)句如下:

CREATE TABLE tb_qquser (
        id INT PRIMARY KEY AUTO_INCREMENT,
        qqnumber VARCHAR (50),
        password VARCHAR(50)
);
INSERT INTO tb_qquser (qqnumber, password)
              VALUES ('123456789', '123');
INSERT INTO tb_qquser (qqnumber,password)
              VALUES ('987654321', '456');
INSERT INTO tb_qquser (qqnumber,password)
              VALUES ('1314520888', '123abe');

在實(shí)際開發(fā)中,用戶信息是存放在數(shù)據(jù)庫(kù)中的,登錄時(shí)的賬號(hào)和密碼信息也需要去數(shù)據(jù)庫(kù)中查詢,本節(jié)將使用JDBC技術(shù)來完善QQ登錄案例。

2.編寫查詢用戶方法

創(chuàng)建一個(gè)用于實(shí)現(xiàn)用戶登錄相關(guān)操作的類LoginDao,并在類中編寫查詢用戶的方法findUser(),如例9-2所示。

例9-2 LoginDao.java

import java.sql.*;
public class LoginDao {
    PreparedStatement prestnt =null;
    Connection conn =null;
    ResultSet rs =null,
    //查詢用戶
    public Boolean findUser (String qqnumber, String pwd)
                          throws SQLException {
        try {
          //1.加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)
          Class.forName("com.mysq1.jdbc.Driver");
          String url ="jdbc:mysql://localhost:3306/jdbc":
          String username ="root";
          String password ="root";
          //2.獲取數(shù)據(jù)庫(kù)連接
          conn =DriverManager .getConnection (url, username, password) ;
          //3.定義需要執(zhí)行的SQL
          String sql ="select * from tb_qquser "
          +"where qqnumber =? "
          +"and password =?";
          //4.創(chuàng)建PreparedStatement對(duì)象
          prestmt =conn.prepareStatement(sql);
          prestmt.setString(1, qqnumber);
          prestmt.setString (2, pwd);
          //5.執(zhí)行SQL并將獲取的數(shù)據(jù)信息存放在ResultSet中
          rs =prestmt.executeQuery();
          //如果查詢的結(jié)果集中有超過一條的記錄,則登錄成功
          if (rs.next()) { return true; }
        } catch (Exception e) {
          e.printStackTrace();
        } finally {
           //6.釋放資源
           if (rs !=null) {rs.close(); }
           if (prestnt !=null){prestmt.close();}
           if (conn !=null) {conn.close();}
        }
        return false;
    }
}

在上述的查詢用戶方法中,加粗部分的代碼就是查詢操作的主要代碼。在定義的SQL中,使用占位符“?”來表示查詢條件,并通過PreparedStatement對(duì)象的setString()方法設(shè)置參數(shù)值。執(zhí)行SQL后,如果結(jié)果集中有超過一條以上的數(shù)據(jù),那么就表示數(shù)據(jù)表中有此用戶,會(huì)返回true;否則表示沒有此用戶,將返回false。


3.修改監(jiān)聽方法

將登錄監(jiān)聽器類LoginListener中 actionPerformed()方法內(nèi)的模擬查詢用戶名和密碼的代碼修改為查詢數(shù)據(jù)庫(kù)的方法,修改后的方法代碼如下:

public void actionPerformed (ActionEvent e) {
    //1.獲取登錄的賬號(hào)和密碼
    String name = (String) jco.getSelectedItem();
    String pwd =new String (jpa.getPassword () );
    //創(chuàng)建LoginDao對(duì)象
    LoginDao loginDao =new LoginDao () ;
    //查詢登錄用戶,如果有此用戶并且密碼正確則返回true
    Boolean bl =false;
    try {
    bl =loginDao.findUser (name, pwd) ;
    } catch (SQLException el) 
        el.printStackTrace();
        {
    //2判斷輸入的賬號(hào)和密碼是否正確
    If(bl)  {
       //賬號(hào)正確,先關(guān)閉當(dāng)?shù)腏Erame登錄窗口
       jf.diapose ():
       //模監(jiān)顯示登錄成功后的QQ窗口
       JFrane jfn =new JErame();
       Jfn.setSize(289, 687);
       jfn.setLocation(800, 100);
       jfn.setUndecorated(true);
       jfn.setResizable (true);
       jfn.setVisible (true);
       //為QQ顯示窗口添加背景圖片和退出按鈕組件
       JPanel panel =new JPanel ();
       panel.setLayout (null);
       panel.setPreferredSize(new Dimension (0, 140));
       ImageIcon image =new ImageIcon("images/qqSuccess.jpg");
       JLabel background =new JLabel (image);
       background.setBounds (0, 0, 289, 687);
       panel.add (background);
       //添加退出按紐
       JButton out =
       new JButton (new ImageIcon("images/close2 normal.jpg"));
       out.setBounds(265, 0, 26, 26);
       out.setRolloverIcon(new ImageIcon("images/close2 hover.jpg"));
       out.setBorderPainted(false);
       panel.add (out);
       jfn.add(panel);
       //為退出按鈕注冊(cè)監(jiān)聽器,關(guān)閉當(dāng)前窗口
       out.addActionListener (event ->jfn.dispose ());
   ) else (
        //QQ賬號(hào)或密碼輸入錯(cuò)誤,彈出提示信息
        J0ptionPane.showMessageDialog (null,
                “你輸入的賬戶名或密碼不正確,請(qǐng)重新輸入!”);
     }
}

從上述代碼可以看出,所修改的部分其實(shí)非常簡(jiǎn)單。首先創(chuàng)建了LoginDao對(duì)象,然后使用該對(duì)象的findUser()方法來查詢是否存在所輸入的用戶,如果返回結(jié)果為true,則表示存在該用戶,可以成功登錄;如果為false,則提示賬戶名或密碼錯(cuò)誤。


4.啟動(dòng)程序,查看效果

修改完成后,即可啟動(dòng)程序,此時(shí)的登錄窗口如圖9-5所示。

在QQ登錄窗口分別輸入正確的賬號(hào)和密碼并單擊登錄按鈕后,將顯示登錄后的窗口信息,如圖9-6所示。

1639444201612_qq登錄頁(yè)面.png

從圖9-6可以看出,用戶已登錄成功,這說明使用JDBC已正確查詢出了數(shù)據(jù)表中的數(shù)據(jù)。如果通過其他兩個(gè)賬號(hào),在輸入正確的密碼后,將同樣可以登錄成功。這里就不再演示了,讀者可自行測(cè)試。

1639444539045_qq列表頁(yè)面.png

猜你喜歡:

JDBC處理CLOB數(shù)據(jù)和BLOB數(shù)據(jù)

使用MySQL數(shù)據(jù)庫(kù),實(shí)現(xiàn)你的第一個(gè)JDBC程序

JDBC詳細(xì)教程與jdbc連接數(shù)據(jù)庫(kù)方法

實(shí)現(xiàn)JDBC程序一共需要幾步?

黑馬程序員JAVA開發(fā)培訓(xùn)

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!