我正在使用java servlet和mysql开发登录应用程序,当我尝试通过提供用户名和密码登录时出现以下错误。
java.sql.SQLException: Column 'alex' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.ResultSet.findColumn(ResultSet.java:987)
at com.mysql.jdbc.ResultSet.getString(ResultSet.java:5584)
at org.kaveen.login.database.LoginDaoImpl.userValidate(LoginDaoImpl.java:36)
at org.kaveen.login.controller.Login.doPost(Login.java:44)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
..................................
这是我的LoginDaoImpl类
public class LoginDaoImpl implements LoginDao {
public String userValidate(LoginBean loginBean) {
String userName = loginBean.getUserName();
String password = loginBean.getPassword();
System.out.println(userName);
System.out.println(password);
String sql = "select username,password from users";
String userNameDB = "";
String userPasswordDb = "";
Connection connection = null;
java.sql.Statement statement = null;
ResultSet resultSet = null;
try {
connection = DbConnecton.setConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
userNameDB = resultSet.getString(userName);
userPasswordDb = resultSet.getNString(password);
if (userName.equals(userNameDB)
&& password.equals(userPasswordDb)) {
return "Success";
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return "Failed invalid credentials";
}
}
任何人都可以解释为什么我收到此错误?我该如何解决?
答案 0 :(得分:1)
您正尝试使用名为" alex"?的用户名登录这是你的错误:
userNameDB = resultSet.getString(userName);
在ResultSet上使用方法getString时,您可以指定结果中列的列索引(从1开始),或列名称(在您的情况下,列名称为" username") 。您正在将实际用户名传递给方法,当然该列不存在。
试试这个:
userNameDB = resultSet.getString("username");
答案 1 :(得分:0)
你在做什么是非常错误的。您的查询从users表中获取所有行,并且您正在迭代它。
要更正它,您必须在从结果集中获取数据时传递列的名称。
userNameDB = resultSet.getString(userNameColumn);
userPasswordDb = resultSet.getNString(passwordColumn);
但这种方式非常愚蠢。您可以使用简单的查询在数据库中执行此操作。 使用此查询,不需要迭代。
select * from users where username_col=username and password_col=password
假设您将密码存储在原始文本中是错误的。
答案 2 :(得分:0)
您应该准备一个SQL查询来检查您的用户凭据是否匹配,循环结果集可能代价高昂(当用户数量很高时)。
String sql = "select username, password from users where username=:username and password = :pass";
Connection connection = null;
java.sql.Statement statement = null;
ResultSet resultSet = null;
try {
connection = DbConnecton.setConnection();
statement = connection.createStatement();
resultSet= statement.executeQuery(sql);
resultSet.setString("username", username );
resultSet.setString("pass", password );
if (resultSet.hasNext()){ // check if we had found someone with same username and password
return "Success";
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(connection!=null)// finaly remember to close connection if open
connection.close()
}
return "Failed invalid credentials";