我目前正在尝试用Java和SQL创建一个登录系统,目前我遇到了错误。
PreparedStatement s1 = con.prepareStatement("SELECT * FROM dbo.Logins WHERE Username=? AND Password=?");
s1.setString(1,loginUsername);
s1.setString(2, loginPassword.toString());
ResultSet rs = s1.executeQuery();
if(rs.next()){
JOptionPane.showMessageDialog(null, "User Found");
}
else{
JOptionPane.showMessageDialog(null, "Error");
}
当我运行那段代码时,它总是显示if / else的else部分,我不知道为什么。提前谢谢。
编辑:是的,数据库中填充了用户。 Edit2:我将函数更改为需要两个字符串args。
答案 0 :(得分:0)
您必须尝试使用while(rs.next())
代替if(rs.next())
。
如果这不起作用,您的数据库(您提到的数据库是否已填充)是否包含您要搜索的用户名和密码的特定值?如果没有,那可能就是问题所在。
如果这也不起作用,你可能已经关闭了一些对象(例如s1.close()或con.close())。如需进一步的帮助,您需要提供更详细的整个代码内容。
答案 1 :(得分:0)
对于给定的查询,您可以获取表中可用的行数,如果它大于0,则它将执行User Found语句。
PreparedStatement s1 = con.prepareStatement("SELECT * FROM dbo.Logins WHERE Username=? AND Password=?");
s1.setString(1,loginUsername);
s1.setString(2, loginPassword.toString());
ResultSet rs = s1.executeQuery();
int rowCount = rs.last() ? rs.getRow() : 0; //Number of rows available in table for query
if(rowCount>0)
JOptionPane.showMessageDialog(null, "User Found");
}
else{
JOptionPane.showMessageDialog(null, "Error");
}
答案 2 :(得分:0)
public void Login(String user, String pass) throws ClassNotFoundException, SQLException{
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
MainWindow mw = new MainWindow();
String userName = "<USERNAME>";
String password = "<PASSWORD>";
String url = "<URL>";
Connection con = DriverManager.getConnection(url, userName, password);
PreparedStatement s1 = con.prepareStatement("SELECT * FROM dbo.Logins WHERE Username=? AND Password=?");
s1.setString(1,user);
s1.setString(2, pass);
ResultSet rs = s1.executeQuery();
//int rowCount = rs.last() ? rs.getRow() : 0; //Number of rows
System.out.println("Name: " + user + "\nPass: " + pass);
if(rs.next())
JOptionPane.showMessageDialog(null, "User Found");
else{
JOptionPane.showMessageDialog(null, "Error");
}
con.close();