Java开发案例:使用JDBC技术来实现QQ登录
原创
©著作权归作者所有:来自51CTO博客作者黑马程序员的原创作品,请联系作者获取转载授权,否则将追究法律责任
在实际开发中,用户信息是存放在数据库中的,登录时的账号和密码信息也需要去数据库中查询,本节将使用JDBC技术来完善QQ登录案例。
1.创建数据表,并添加用户数据
在jdbc数据库中创建数据表tb_qquser,并在表中插入3条数据,其执行的SQL语句如下:
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');
在实际开发中,用户信息是存放在数据库中的,登录时的账号和密码信息也需要去数据库中查询,本节将使用JDBC技术来完善QQ登录案例。
2.编写查询用户方法
创建一个用于实现用户登录相关操作的类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.加载数据库驱动
Class.forName("com.mysq1.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/jdbc":
String username ="root";
String password ="root";
//2.获取数据库连接
conn =DriverManager .getConnection (url, username, password) ;
//3.定义需要执行的SQL
String sql ="select * from tb_qquser "
+"where qqnumber =? "
+"and password =?";
//4.创建PreparedStatement对象
prestmt =conn.prepareStatement(sql);
prestmt.setString(1, qqnumber);
prestmt.setString (2, pwd);
//5.执行SQL并将获取的数据信息存放在ResultSet中
rs =prestmt.executeQuery();
//如果查询的结果集中有超过一条的记录,则登录成功
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对象的setString()方法设置参数值。执行SQL后,如果结果集中有超过一条以上的数据,那么就表示数据表中有此用户,会返回true;否则表示没有此用户,将返回false。
3.修改监听方法
将登录监听器类LoginListener中 actionPerformed()方法内的模拟查询用户名和密码的代码修改为查询数据库的方法,修改后的方法代码如下:
public void actionPerformed (ActionEvent e) {
//1.获取登录的账号和密码
String name = (String) jco.getSelectedItem();
String pwd =new String (jpa.getPassword () );
//创建LoginDao对象
LoginDao loginDao =new LoginDao () ;
//查询登录用户,如果有此用户并且密码正确则返回true
Boolean bl =false;
try {
bl =loginDao.findUser (name, pwd) ;
} catch (SQLException el)
el.printStackTrace();
{
//2判断输入的账号和密码是否正确
If(bl) {
//账号正确,先关闭当的JErame登录窗口
jf.diapose ():
//模监显示登录成功后的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);
//为退出按钮注册监听器,关闭当前窗口
out.addActionListener (event ->jfn.dispose ());
) else (
//QQ账号或密码输入错误,弹出提示信息
J0ptionPane.showMessageDialog (null,
“你输入的账户名或密码不正确,请重新输入!”);
}
}
从上述代码可以看出,所修改的部分其实非常简单。首先创建了LoginDao对象,然后使用该对象的findUser()方法来查询是否存在所输入的用户,如果返回结果为true,则表示存在该用户,可以成功登录;如果为false,则提示账户名或密码错误。
4.启动程序,查看效果
修改完成后,即可启动程序,此时的登录窗口如图9-5所示。
在QQ登录窗口分别输入正确的账号和密码并单击登录按钮后,将显示登录后的窗口信息,如图:
从图9-6可以看出,用户已登录成功,这说明使用JDBC已正确查询出了数据表中的数据。如果通过其他两个账号,在输入正确的密码后,将同样可以登录成功。这里就不再演示了,读者可自行测试。