0

可能重复:
在程序中获得意外输出

坦率地说,这个问题问起来可能很傻,但我是 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
}
}

任何输入将不胜感激。

4

5 回答 5

3

您正在为所有员工选择数据并在它们中查找匹配项。

让数据库过滤它要好得多:

select count(*)  from regid where emp_id = ? and password = ?

然后你只需要检查这是否返回 0 或 1。

此外,password希望只是一个密码哈希。

于 2012-09-28T07:02:19.193 回答
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
}

作为旁注,我还建议在将其提供给您的查询之前验证用户的输入。

于 2012-09-28T07:02:35.710 回答
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
}
于 2012-09-28T07:16:30.343 回答
1

查询您的数据库"select emp_id,password,... from regid where emp_id=? and password=?"

创建 PreparedStatement 并设置 emp_id 和密码。如果 emp_id 和密码匹配,它将返回 1 行。

于 2012-09-28T07:02:51.940 回答
1

您实际上不应该匹配结果集中的密码。您的 sql 查询应该类似于

select emp_id from regid where password='userpassword'

其中 userpassword 是您从使用的屏幕上获得的密码

于 2012-09-28T07:03:08.073 回答