Java SQL Query Resultset always returns null 找不到解决办法
Java SQL Query Resultset always returns null can't find solution
我正在尝试检查用户输入的用户名和密码是否与我的数据库中的用户名和密码匹配,但是无论我尝试什么,结果集仍然为空。 sql 变量设置为用户名,通行证设置为密码,但是当我输入正确的详细信息时,它显示没有任何结果
public boolean Login(){
boolean valid = true;
try {
String stmt = "SELECT * From TBLUser where User = ? and Password = ? ;";
PreparedStatement pstmt = conn.prepareStatement(stmt);
pstmt.setString(1, sql); pstmt.setString(2, pass);
ResultSet rs = pstmt.executeQuery();
if(!rs.next()){
valid = false;
}
} catch (SQLException e) {
System.err.println("Error: "+e);
}
return valid;
}
此外,更好的做法是:
public boolean Login(String asql, String apass){
boolean valid = true;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
String stmt = "SELECT * From TBLUser where User = ? and Password = ? ";
pstmt = conn.prepareStatement(stmt);
pstmt.setString(1, asql);
pstmt.setString(2, apass);
rs = pstmt.executeQuery();
valid = (!rs.next());
} catch (SQLException e) {
e.printStaceTrace();
} finally { // cleanup
try { rs.close(); } catch (Exception ex) {}
try { ps.close(); } catch (Exception ex) {}
}
return valid;
}
应用程序的问题不在于代码,而在于数据库,因为 User 列名称之一是保留字,因此此更改解决了问题,感谢@Grayson 的所有帮助
public boolean Login(){
boolean valid = true;
try {
String stmt = "SELECT * From TBLUser where UserName = ? and Password = ? ;";
PreparedStatement pstmt = conn.prepareStatement(stmt);
pstmt.setString(1, sql); pstmt.setString(2, pass);
ResultSet rs = pstmt.executeQuery();
if(!rs.next()){
valid = false;
}
} catch (SQLException e) {
System.err.println("Error: "+e);
}
return valid;
}
使用带“ ”的单位上限来保存您的列-Table 喜欢
创建Table"TBLUser"{
"User" 字符...
"Password"...
}
同样,您的 select 查询将更改 String
stmt = "SELECT * From \"TBLUser\" 其中 \"User\" = ? 和 \"Password\" = ? "
这应该有效。
我正在尝试检查用户输入的用户名和密码是否与我的数据库中的用户名和密码匹配,但是无论我尝试什么,结果集仍然为空。 sql 变量设置为用户名,通行证设置为密码,但是当我输入正确的详细信息时,它显示没有任何结果
public boolean Login(){
boolean valid = true;
try {
String stmt = "SELECT * From TBLUser where User = ? and Password = ? ;";
PreparedStatement pstmt = conn.prepareStatement(stmt);
pstmt.setString(1, sql); pstmt.setString(2, pass);
ResultSet rs = pstmt.executeQuery();
if(!rs.next()){
valid = false;
}
} catch (SQLException e) {
System.err.println("Error: "+e);
}
return valid;
}
此外,更好的做法是:
public boolean Login(String asql, String apass){
boolean valid = true;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
String stmt = "SELECT * From TBLUser where User = ? and Password = ? ";
pstmt = conn.prepareStatement(stmt);
pstmt.setString(1, asql);
pstmt.setString(2, apass);
rs = pstmt.executeQuery();
valid = (!rs.next());
} catch (SQLException e) {
e.printStaceTrace();
} finally { // cleanup
try { rs.close(); } catch (Exception ex) {}
try { ps.close(); } catch (Exception ex) {}
}
return valid;
}
应用程序的问题不在于代码,而在于数据库,因为 User 列名称之一是保留字,因此此更改解决了问题,感谢@Grayson 的所有帮助
public boolean Login(){
boolean valid = true;
try {
String stmt = "SELECT * From TBLUser where UserName = ? and Password = ? ;";
PreparedStatement pstmt = conn.prepareStatement(stmt);
pstmt.setString(1, sql); pstmt.setString(2, pass);
ResultSet rs = pstmt.executeQuery();
if(!rs.next()){
valid = false;
}
} catch (SQLException e) {
System.err.println("Error: "+e);
}
return valid;
}
使用带“ ”的单位上限来保存您的列-Table 喜欢
创建Table"TBLUser"{ "User" 字符... "Password"... }
同样,您的 select 查询将更改 String stmt = "SELECT * From \"TBLUser\" 其中 \"User\" = ? 和 \"Password\" = ? "
这应该有效。