迭代结果集

时间:2012-09-28 06:57:52

标签: java jdbc

  

可能重复:
  Getting unexpected output in program

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

任何输入都将受到高度赞赏。

5 个答案:

答案 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是您使用

屏幕获得的密码