You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing登录表单未显式比较字符串,rs.next()如何实现验证?

关于Java Swing登录表单中ResultSet.next()验证匹配的疑问

我跟着YouTube教程做了连接MySQL的Java Swing登录表单,当输入的用户名、密码和数据库数据匹配时,会跳转到新的JForm。但我有个疑惑:代码里没写显式的字符串比较,ResultSet的rs.next()是怎么检测输入和数据库数据是否匹配的?

相关代码如下:

private void loginbuttonActionPerformed(java.awt.event.ActionEvent evt) {                                            
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String dataBase = "jdbc:mysql://localhost/laundry_akun";
        String dbUsername = "root";
        String dbPassword = "";
        Connection con = DriverManager.getConnection(dataBase,dbUsername,dbPassword);
        
        String username = username_textfield.getText();
        String password = password_textfield.getText();
        
        Statement st = con.createStatement();
        String sql = "SELECT * FROM akun WHERE username='" + username + "' and password='" + password + "'";
        ResultSet rs = st.executeQuery(sql);
        
        if(rs.next()){
            dispose();
            testpage tes = new testpage();
            tes.show();
        }else{
            JOptionPane.showMessageDialog(this, "Username or Password Wrong");
            username_textfield.setText("");
            password_textfield.setText("");
        }
        
        con.close();

    }  catch (Exception e) {
        System.out.println(e.getMessage());
    }
}   

原理说明

字符串比较的逻辑不是在Java代码里执行的,而是交给MySQL数据库处理的,核心就在这条SQL查询语句:

SELECT * FROM akun WHERE username='" + username + "' and password='" + password + "'";

当你执行这条SQL时,数据库会自动遍历akun表的所有记录,把每条记录的username和password字段,分别和你输入的用户名、密码做字符串匹配:

  • 如果找到完全匹配的记录,SQL会返回包含这条记录的结果集
  • 如果没有任何匹配的记录,结果集就是空的

而rs.next()的作用只是检查结果集里是否存在可读取的记录:

  • 当结果集非空(存在匹配的用户),rs.next()返回true,触发跳转新页面的逻辑
  • 当结果集为空(无匹配用户),rs.next()返回false,弹出登录失败的提示

额外提醒

当前代码用字符串拼接生成SQL的写法存在SQL注入风险,比如用户输入特殊字符可能篡改SQL逻辑。建议改用PreparedStatement做参数化查询,示例代码如下:

String sql = "SELECT * FROM akun WHERE username=? and password=?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, username);
pst.setString(2, password);
ResultSet rs = pst.executeQuery();

这种写法既安全,还能避免字符串拼接导致的SQL语法错误。


内容的提问来源于stack exchange,提问作者user16787623

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:15:44