朋友您好我正在尝试创建一个登录网页应用程序检查此代码它将显示如下错误...
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)
我认为如果您可以从servlet中删除所有与数据库相关的代码并将其放在一个简单的Java类中,那将对您非常有益。在这种情况下,您可以轻松地测试代码,而无需每次都编译servlet并重新启动服务器进行调试。
public class ValidateLogin {
public boolean validate(String username, String pwd) {
...
..
}
答案 1 :(得分:0)
您使用JDBC-ODBC桥驱动程序sun.jdbc.odbc.JdbcOdbcDriver
。似乎此驱动程序不支持同一列的getXXX()
的第二次调用,并且您调用rs.getString(1)
两次,因此发生错误。您可以将rs.getString(1)
的结果存储到变量中,然后使用此变量访问pswd
之后的值。
你可以参考 Why I cannot debug a DatabaseMetaData? 了解更多信息