与SQL登录相关的Java
当我登录时,一切都很完美。但当我输入一个不存在的帐户时,一个消息对话框会根据数据库中的帐户数循环。我相信这是因为我使用了与SQL登录相关的Java,java,sql-server,Java,Sql Server,当我登录时,一切都很完美。但当我输入一个不存在的帐户时,一个消息对话框会根据数据库中的帐户数循环。我相信这是因为我使用了while(rss.next())。 这是我的密码: try { if(e.getSource()==loginButton){ int count = 1; conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=login_DB;in
while(rss.next())
。
这是我的密码:
try {
if(e.getSource()==loginButton){
int count = 1;
conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=login_DB;integratedSecurity=true");
st=conn.createStatement();
rss=st.executeQuery("select * from tblLogin");
while(rss.next()){
String user = rss.getString(1);
String pass = rss.getString(2);
if(usernameTF.getText().equals(user)&&passwordTF.getText().equals(pass)){
JOptionPane.showMessageDialog(null,"YEAAAA");
}//if success
else {
JOptionPane.showMessageDialog(null,"Account doesn't exist! Please try again.");
}
}//while
}//getsource loginButton
做这样的事
int flag = 0;
if(usernameTF.getText().equals(user) && passwordTF.getText().equals(pass))
{
flag=1; // if found then, value change to 1 otherwise it will be 0
}
//Now, put below condition after while loop
if (flag==1) {
JOptionPane.showMessageDialog(null,"YEAAAA");
}
else {
JOptionPane.showMessageDialog(null,"Account doesn't exist! Please try again.");
}
或
正如@Thilo所建议的,您可以在
SELECT
查询中使用WHERE
子句 您需要使用一个局部变量,如我在下面设置的“found”。找到匹配项后,打印消息并将“已找到”标记为true。退出循环后,检查find的值,并根据需要打印错误消息
if(e.getSource()==loginButton){
int count = 1;
conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=login_DB;integratedSecurity=true");
st=conn.createStatement();
rss=st.executeQuery("select * from tblLogin");
boolean found = false;
while(rss.next()){
String user = rss.getString(1);
String pass = rss.getString(2);
if(usernameTF.getText().equals(user)&&passwordTF.getText().equals(pass)){
JOptionPane.showMessageDialog(null,"YEAAAA");
found = true;
}//if success
}//while
if(found)
JOptionPane.showMessageDialog(null,"Account doesn't exist! Please try again.");
}//getsource loginButton
不要从TblLogin中选择all,而是在查询中放入WHERE子句,这样它只会从该用户名为true的数据库中提取,然后(假设每个帐户只有一个用户名),如果用户名存在,将返回一个结果,然后您可以根据所用内容比较哈希或密码。例如:
String queryCriteria = "SELECT Username, Password FROM TblLogin WHERE Username = ? ";
statement= connection.prepareStatement(queryCriteria );
statement.setString(1,usernameEntered);
resultSet = stmt.executeQuery();
为什么不使用WHERE子句只获取候选记录(实际上最多应该是一个),而不是所有记录呢?我创建了一个数据库,它只有一个表,只有用户名和密码。我知道这很愚蠢,哈哈哈,但是我还在练习在两者之间建立联系。好主意:D它真的起作用了!如果出现逻辑问题,我会告诉你,最好使用
boolean
标志。还有像继续
,中断
,返回
,也用于流控制。@Thilo布尔
可能是更好的选择。是的,当然,我们可以在对话框代码之前的else
条件中使用continue
。但是,在这种情况下,对话框将永远不会弹出。:)我明白你的意思,但你能解释一下“如果(发现)”怎么办吗?我是新来的xD,我是说这是我第一次看到带有表达式的if语句:DThe if(found)tests if found==true,它测试我们是否找到了我们正在寻找的特定帐户