我写了一个登陆界面的程序,但是输入和数据库相匹配的用户名和密码时却不能正确进行判断,也就是“登陆”时输出else语句的内容(登录失败,请重新输入.....) 望大家帮帮忙,谢谢!
关键的源代码如下:
</head>
<body>
<%
String use1 = request.getParameter("use");
String use2 = request.getParameter("passwd"); //加载数据库
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//连接数据库
Connection con = DriverManager.getConnection("jdbc:odbc:mytest;database=master",
"sa", "123456");
//Connection con = DriverManager.getConnection
// ("jdbc:microsoft:sqlserver://server1:1433","sa","123456");
//创建statement
Statement state = con.createStatement();
//查询
ResultSet set = state
.executeQuery("select Passwd from USERS where Name='"
+ use1 + "' ");
if (set.next()) {
if (set.getString(1).equals(use2)) {
out.println("用户登陆成功");
response.sendRedirect("logwel.jsp?user="+use1);
} else {
// response.sendRedirect("login.jsp");
out.println("登录失败,请重新输入密码"); }
} else {
//response.sendRedirect("login.jsp");
System.out.println(set.getStatement());
out.println("登录失败,请重新输入....."); }
%>
</body>
</html>sql server数据库代码:
CREATE TABLE USERS(
Name varchar(10),
Passwd varchar(14),
IdentId varchar(30),
);
select * from USERS;insert into USERS values('张三','123456','4414221962');
insert into USERS values('韩江','654321','4414221969');
insert into USERS values('宋天明','123456','4414221962');
insert into USERS values('王强','142536','4414221972');
insert into USERS values('陈玲','789456','4414221982');
关键的源代码如下:
</head>
<body>
<%
String use1 = request.getParameter("use");
String use2 = request.getParameter("passwd"); //加载数据库
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//连接数据库
Connection con = DriverManager.getConnection("jdbc:odbc:mytest;database=master",
"sa", "123456");
//Connection con = DriverManager.getConnection
// ("jdbc:microsoft:sqlserver://server1:1433","sa","123456");
//创建statement
Statement state = con.createStatement();
//查询
ResultSet set = state
.executeQuery("select Passwd from USERS where Name='"
+ use1 + "' ");
if (set.next()) {
if (set.getString(1).equals(use2)) {
out.println("用户登陆成功");
response.sendRedirect("logwel.jsp?user="+use1);
} else {
// response.sendRedirect("login.jsp");
out.println("登录失败,请重新输入密码"); }
} else {
//response.sendRedirect("login.jsp");
System.out.println(set.getStatement());
out.println("登录失败,请重新输入....."); }
%>
</body>
</html>sql server数据库代码:
CREATE TABLE USERS(
Name varchar(10),
Passwd varchar(14),
IdentId varchar(30),
);
select * from USERS;insert into USERS values('张三','123456','4414221962');
insert into USERS values('韩江','654321','4414221969');
insert into USERS values('宋天明','123456','4414221962');
insert into USERS values('王强','142536','4414221972');
insert into USERS values('陈玲','789456','4414221982');
if (set.getString(1).equals(use2)) {
out.println("用户登陆成功");你在这里把resultset打印一下或者输出到页面显示下。set.getString(1),set.getString(2).
看看到底取到的是什么。
如果是Null有Null的处理方法,如果resultset取的值不对有想
出現 登录失败,请重新输入..... 表示根本沒找到值。
最可能是因為你的帳號是中文,編碼不一致就會找不到。可以先設定一個是純英文帳號測試一下。
************
我改为英文用户名却抛出一下异常
严重: Servlet.service() for servlet jsp threw exception
java.sql.SQLException: No data found
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
at org.apache.jsp.logincl_jsp._jspService(logincl_jsp.java:85)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
没获取到数据吧?闷
ResultSet set = state
.executeQuery("select Passwd from USERS where Name='"
+ use1 + "' ");
if (set.next()) {
if (set.getString(1).equals(use2)) {改写:
//查询
ResultSet set = state
.executeQuery("select count(*)from USERS where Name='"
+ use1.trim() + "' and passwd='"+use2.trim()+"'");
if (set.next()) {
if (set.getint(1)==0) {
//可以在页面是输入测试sql语句,再运行在sql查询分析器中
登入後會執行這行
response.sendRedirect("logwel.jsp?user="+use1);所以檢查看看是不是登入後轉向到 logwel.jsp頁面,但是資料不對所以發生錯誤。但至少確認登入的問題是編碼問題了。
你在这个语句里面添加一条语句
else {
// response.sendRedirect("login.jsp");
System.err.println("连接失败"+e.getMessage()); out.println("登录失败,请重新输入密码");}
用System.err.println("连接失败"+e.getMessage()); 来在服务器端输出你的异常
lz把set.getString(1)这个打印看看是什么。。
String use2 = request.getParameter("passwd");
把这里取出来的值放到你的sql里
"select Passwd from USERS where Name= '"+use2+"'"在数据库里查询一下 看结果对不对
如果是对的 那就是下面的取值的时候有问题
set.getString(1)
都打印下 看看是啥