坦率地说,这个问题可能很愚蠢,但我是Java的新手 这是我的表
emp(name,id,address,date)
。
现在我要匹配某个员工的相应密码。
String sql = "select emp_id,password from regid";
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
// here will be iterate function using resultset,i guess
// what should be the best logic to check the name and password...any inputs
//in terms of code
if(if (employee.equals(rs.getString("emp_id")) && password.equals(rs.getString("password")))){
You are Mr. emp // in terms of code
}
else{
Who are You ?? //in terms of code
}
}
任何输入都将受到高度赞赏。
答案 0 :(得分:3)
您正在为所有员工选择数据并查看他们的匹配。
让数据库过滤它会好得多:
select count(*) from regid where emp_id = ? and password = ?
然后你只需要检查它是否返回0或1。
此外,password
希望只是一个密码哈希。
答案 1 :(得分:3)
使用PreparedStatement创建查询。因此, PreparedStatement 的参数化查询将是这样的:
SELECT * from regid WHERE emp_id = ? AND password = ?
插入参数值并执行您的声明。所以它会是这样的:
PreparedStatement ps = null;
ResultSet rs = null;
boolean validUser = false;
try{
ps = connection.prepareStatement("SELECT * from regid WHERE emp_id = ? AND password = ?");
ps.setString(1, [user_id_input]);
ps.setString(2, [user_pw_input]);
rs = ps.executeQuery();
validUser = rs.next();
}finally{
//Release your resources
}
if(validUser){
//user is validated
}
作为旁注,我还建议在将用户的输入提供给您的查询之前对其进行验证。
答案 2 :(得分:2)
从数据库中获取所有数据会使您的应用程序性能变慢,因此请在查询后检索一条记录。
boolean status = false;
String emp_name = "";
String emp_password = "";
String sql = "select * from regid where emp_id='"+emp_id+"' AND password='"+password+"'";
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
if(emp_id.equals(rs.getString("emp_id")) && password.equals(rs.getString("password")))
{
// fetch employee data
status = true;
}
}
if(status)
{
// login correct
}
else
{
// login incorrect
}
答案 3 :(得分:1)
使用"select emp_id,password,... from regid where emp_id=? and password=?"
创建PreparedStatement并设置emp_id和密码。如果emp_id和密码匹配,它将返回1行。
答案 4 :(得分:1)
您实际上不应该匹配结果集中的密码。您的SQL查询应该类似于
select emp_id from regid where password='userpassword'
其中userpassword是您使用
屏幕获得的密码