我只点击了一次按钮,但是输出是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();
答案 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也可以帮到你。