Java仪表板登录错误

标签 java

我一直在做java项目。我在仪表板登录代码中遇到了麻烦。我的登录代码如下。

String fieldtxtname=txtusername.getText();
String fieldtxtpw=txtpassword.getText();
String fieldtxtutype=txttypeof.getText();
try{

    Connection cnn=DriverManager.getConnection("jdbc:mysql://localhost/student","root","");
    Statement stm=cnn.createStatement();

    String sqlQuery="select username,password,typeof from tbl_user";

    ResultSet rs=stm.executeQuery(sqlQuery);

      while(rs.next()){
        String unamedb=rs.getString("username");
        String pworddb=rs.getString("password");
        String tofdb=rs.getString("typeof");
         if(fieldtxtname.equals ("")||fieldtxtpw.equals ("")||fieldtxtutype.equals ("")){
            System.out.println("The fields arenot filled properly");
            }
          else if(fieldtxtname.equals(unamedb)&&fieldtxtpw.equals(pworddb)&&fieldtxtutype.equals(tofdb)){
            System.out.println("Access granted");
            }
         else
            {
            System.out.println("Unknown username"); 
            }


      } 

}
catch(SQLException ex){
    System.out.println(ex);
} 

代码工作正常,除了当授予访问权限时,它打印为

 Access granted
    Unknown username
    Unknown username
    Unknown username
    Unknown username

字段为空时的情况类似,即它们打印五次,如下所示。

The fields arenot filled properly
The fields arenot filled properly
The fields arenot filled properly
The fields arenot filled properly
The fields arenot filled properly

.我不知道问题的原因。请帮忙,我提前非常感谢。

最佳答案

向您发布的当前代码实现添加注释,以及如何克服在输出上多次打印的问题。

ResultSet rs=stm.executeQuery(sqlQuery); // this is returning 5 elements

while(rs.next()) {
    String unamedb=rs.getString("username");
    String pworddb=rs.getString("password");
    String tofdb=rs.getString("typeof");
    if(fieldtxtname.equals ("")||fieldtxtpw.equals ("")||fieldtxtutype.equals ("")){
        System.out.println("The fields are not filled properly.");
        break;
// you might want to break the loop if the fields are empty in db
    } else if(fieldtxtname.equals(unamedb)&&fieldtxtpw.equals(pworddb)&&fieldtxtutype.equals(tofdb)) {
        System.out.println("Access granted");
        break;
// you might want to break the loop once the username, passwrod is found for access to be granted
    } else {
        System.out.println("Unknown username"); // just to display information
    }
} 

PS - 理想情况下,对于用户名和密码的唯一组合,我希望它仅返回 1 个元素。

编辑 - 要使用 PreparedStatement 来解决上述问题而不使用循环,请查看 answer from @Arvind

关于Java仪表板登录错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41084301/

相关文章:

java - 如何在 Android 10 中打开 Activity (传入 voip 调用)

eclipse - tomcat和java SDK问题

java - 具有单线程的计划执行程序服务

java - Android 内存不足异常存储大量字节

java - 如何在java中为表格单元格设置颜色

java - 如何为父类和子类使用单独的自定义 json 序列化程序?

java - 不关闭我的 JDBC PreparedStatements 会导致内存泄漏吗?

java - 我想要随机数,但上面的编码没有重复,是否正确?

java - MDC 无法与 Log4j 正常工作

java - 大值的 double 到 long 转换不会产生相同的值