签入数据库时​​,输出重复/循环

时间:2017-06-14 11:09:57

标签: java jdbc

我只点击了一次按钮,但是输出是2.我想知道我的条件在while循环中是否有问题?或者我应该使用不同的方法吗?

正如您在图片中看到的那样,我只输入了一个数据,但是输出执行了条件 if和else;

String pass = PF.getText();
        String user = TF.getText();
        Connection con = connect.getConnection();

        Statement st;
        ResultSet rs;

        String query = "SELECT username, password FROM users";

        try{         
            st = con.createStatement();
            rs = st.executeQuery(query);

            while(rs.next()){
                if(user.equals(rs.getString(("username")))){
                    if(pass.equals(rs.getString(("password")))){
                        System.out.println("Logged In!");
                    }else{
                        System.out.println("Error");
                    }
                }else{
                    System.out.println("Not in the database!");
                }
            }
            st.close();

Here is the Sample Output

2 个答案:

答案 0 :(得分:3)

根据您的表格,您有两行。并且,执行以下查询,它将返回两行。

 String query = "SELECT username, password FROM users";

您可以在where子句中添加用户名和密码。

PreparedStatement stmt = connection.prepareStatement("SELECT username, password FROM users where username =? AND password=?");
stmt.setString(1, userid);
stmt.setString(2, pass);

最好使用PreparedStatement来避免任何sql注入。

答案 1 :(得分:1)

在下面的行中,您选择了users

中的所有行
String query = "SELECT username, password FROM users";

您需要使用WHERE子句将其限制为您想要的特定部分。

  

关于WHERE条款的维基百科:

     

WHERE子句不是SQL DML语句的强制子句,但可以   用于限制受SQL DML语句影响的行数或   由查询返回。简而言之,SQL WHERE子句仅用于提取   来自SQL语句的结果,例如:SELECT,INSERT,UPDATE,   或DELETE语句。

如下所示:

String query = "SELECT username, password FROM users WHERE username = '"+yourVariable+"' password = '"+yourVariable+"'";

我使用String连接做到了这一点。这将导致SQL injection。因此,您可以使用PreparedStatement作为@Ravi提及。

  

Oracle doc. about PreparedStatement

     

SQL语句已预编译并存储在PreparedStatement中   宾语。然后可以使用该对象有效地执行此操作   声明多次。

this question也可以帮到你。