2011-03-06 2 views
-1

Привет друзья, я пытаюсь создать приложение для веб-страницы входа в систему, проверьте этот код, он покажет ошибку, подобную этой ... .Ошибка в регистрации нашего приложения ...!

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 LoginServlet.doPost(LoginServlet.java:26) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl 
icationFilterChain.java:306) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF 
ilterChain.java:210) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV 
alve.java:240) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV 
alve.java:161) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j 
ava:164) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j 
ava:108) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal 
ve.java:118) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav 
a:379) 
     at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcesso 
r.java:282) 
     at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.pr 
ocess(Http11AprProtocol.java:357) 
     at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoin 
t.java:1687) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source 
) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
     at java.lang.Thread.run(Unknown Source) 
Exception caught 

код здесь идет ..........

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.sql.*; 
public class LoginServlet extends HttpServlet 
{ 
    Connection con; 
    public void doPost(HttpServletRequest hreq,HttpServletResponse hres) throws ServletException,IOException 
    { 
     try 
     { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      con=DriverManager.getConnection("jdbc:odbc:mohit","system","rock"); 
      PreparedStatement ps=con.prepareStatement("select pswd from signup where username=?"); 
      ps.setString(1,hreq.getParameter("t1")); 
      ResultSet rs=ps.executeQuery(); 
      if(rs.next()) 
      { 
       boolean b=(rs.getString(1)).equals(hreq.getParameter("t2")); 
       System.out.println(rs.getString(1)); 
       System.out.println(hreq.getParameter("t2")); 
       System.out.println(b); 
       if(b) 
       { 
        hres.sendRedirect("./success.html"); 
       } 
       else 
       { 
        hres.sendRedirect("./error.html"); 
       } 
      } 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
      System.out.println("Exception caught "); 
     } 
    } 
} 
+0

1) Ваша трассировка стека не соответствует коду. Строка № 26 не является вызовом 'rs.getString (...)'. 2) Каков тип столбца 'pswd'? –

+0

Здесь я использую pswd для хранения passwprd.Я использую тип char здесь для имени пользователя и пароля. Когда я использую System.out.println (rs.getString (1)); и System.out.println (hreq.getParameter (t2)); оба возвращают ту же строку, но не знают, почему string1.equals (string2) не вернет истинное значение. – user528050

ответ

0

Вы можете использовать JDBC-ODBC драйвер моста sun.jdbc.odbc.JdbcOdbcDriver .Это кажется, что этот драйвер не поддерживает второй вызов getXXX() для тот же столбец, и вы вызываете rs.getString(1) дважды, поэтому возникает ошибка. Вы можете сохранить результат rs.getString(1) переменной и затем использовать эту переменную для доступа к значению pswd после этого.

Вы можете обратиться Why I cannot debug a DatabaseMetaData? для получения дополнительной информации

1

Я думаю, что это будет очень полезно для вас, если вы можете удалить весь код, связанный с базой данных из сервлета и положить его в простом классе Java. В этом случае вы можете легко протестировать код без необходимости компилировать сервлет и перезапускать сервер каждый раз для отладки.

public class ValidateLogin { 
public boolean validate(String username, String pwd) { 
... 
.. 
} 
Смежные вопросы