今天写了个制作用户登录界面的卓业,通过连接数据库来判断用户密码是否正确
但是在把账号密码都输入完成时,一旦点击“登录”按钮,就会出现空指针异常的报错。
我看了下好像是Connection 对象dbConn出现null了,但是不知道怎么解决。
代码如下,我写了主类Demo,检查类Check和SQL设置类SQL
Demo类:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
class User_UI extends JFrame implements ActionListener {
JLabel jLabel1 = new JLabel("用户名:");
JLabel jLabel2 = new JLabel(" 密码:");
JTextField txt_account = new JTextField(20);
JTextField txt_password = new JTextField(20);
JButton sign_up = new JButton("注册");//注册
JButton log_in = new JButton("登录");//登录
public void Display() {
setTitle("注册登录");
setLayout(new BorderLayout());
JPanel jpl_North = new JPanel();
JPanel jpl_Center = new JPanel();
JPanel jpl_South = new JPanel();
//↓动作监听器
sign_up.addActionListener(this);
log_in.addActionListener(this);
{//图形界面设计模块
//三组容器嵌套
jpl_North.add(jLabel1);
jpl_North.add(txt_account);
add(jpl_North, BorderLayout.NORTH);
jpl_Center.add(jLabel2);
jpl_Center.add(txt_password);
add(jpl_Center, BorderLayout.CENTER);
jpl_South.add(log_in);
jpl_South.add(sign_up);
add(jpl_South, BorderLayout.SOUTH);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(500, 300);
setResizable(true);
setVisible(true);
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == log_in) {
try {
new Check().log_in_Check(txt_account.getText());//将账户名传入登录检查函数
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
}
}
}
public class Demo9_3 {
public static void main(String[] args) {
new User_UI().Display();
}
}
Check类:
import javax.swing.*;
import java.sql.ResultSet;
import java.sql.SQLException;
class Check {
ResultSet rs1;
public void log_in_Check(String account) throws SQLException {//登录检查方法
rs1 = new SQL().Sql_sate("select * from S_user");//从表中
while (rs1.next()) {
if (account.equals(rs1.getString(1))) {
;//如果检查到当前行与用户名相等
while (rs1.next()) {
if (account.equals(rs1.getString(2))){
JOptionPane.showMessageDialog(null,"密码正确,登陆成功!","提示",2);
break;}
else{
JOptionPane.showMessageDialog(null,"密码错误!","提示",2);
break;
}
}
}
}
JOptionPane.showMessageDialog(null,"无此用户","提示",2);
}
}
SQL设置类:
import java.sql.*;
public class SQL {
String driverName = "com.mysql.cj.jdbc.Driver";
// 加载JDBC驱动
String dbURL = "jdbc:mysql://localhost:3306/s_user?serverTimezone=UTC";
// 连接服务器和数据库
String userName = "root"; // 默认用户名
String userPwd = "123456"; // 密码
Connection dbConn;
ResultSet rs;
public void Sql_set() throws SQLException {
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
public ResultSet Sql_sate(String sql) throws SQLException {//SQL传入语句方法,返回查询结果。
Statement statement = dbConn.createStatement();
rs = statement.executeQuery(sql);//
return rs;
}
}
这是我在数据库中建立的两个用户信息:
想请教一下,鞋些