有人可以告诉我为什么这不起作用?我希望能够检查从DB查询返回的用户名/密码是否等于值。
会话属性“loginSuccess”始终返回false,即使值应匹配。
<%@ page language="java" import="java.sql.*" %>
<%
String driver = "oracle.jdbc.driver.OracleDriver";
Class.forName(driver).newInstance();
Connection con = null;
ResultSet rst = null;
Statement stmt = null;
try {
String url = "jdbc:oracle:thin:username/password@url:port:SID";
con = DriverManager.getConnection(url);
stmt = con.createStatement();
} catch (Exception e) {
System.out.println(e.getMessage());
}
if (request.getParameter("action") != null) {
rst = stmt.executeQuery("select username, password"
+ " from table");
}
%>
<%
boolean loginCheck = false;
int count = 1;
while (rst.next()) {
if(request.getParameter("action")!=null){
if("username1"==rst.getString("username")){
if("password1"==rst.getString("password")){
loginCheck = true;
}
}
}
count++;
}
if(loginCheck==true){
session.setAttribute("loginSuccess", "true");
}else{
session.setAttribute("loginSuccess", "false");
}
rst.close();
stmt.close();
con.close();
%>
<jsp:forward page="login.jsp"/>
答案 0 :(得分:1)
您正在使用==来比较字符串。请尝试等于。
我建议不要以这种方式将scriptlet代码放在JSP中。您应该使用JSTL标记库编写JSP。
我还建议将该数据库代码放在POJO中,以便您可以离线测试它,与servlet / JSP引擎分开。然后让servlet实例化POJO,与数据库交互,并将结果发送到JSP。
这是一项更多的工作,但从长远来看,设计将扩展和扩展。
答案 1 :(得分:1)
我认为你在这行代码中遇到了一个基本的语法错误。
“USERNAME1” == rst.getString( “用户名”)
应该是这样的
rst.getString( “用户名”)equalsIgnoreCase( “USERNAME1”);
和密码类似。 请检查这是否有帮助。