Java servlet提供createSQLException
在netbeans浏览器中执行时,我有以下代码显示空白屏幕,无法移动到目标页面Java servlet提供createSQLException,java,servlets,jdbc,Java,Servlets,Jdbc,在netbeans浏览器中执行时,我有以下代码显示空白屏幕,无法移动到目标页面 import java.io.*; import java.net.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; public class SignIn extends HttpServlet { public void init(ServletConfig config) throws Servl
import java.io.*;
import java.net.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SignIn extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
System.out.println("Signin Init");
}
public void destroy() { }
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
System.out.println("Signin process");
System.out.println("name="+request.getParameter("uname"));
System.out.println("Password="+request.getParameter("pwd"));
name=request.getParameter("uname");
password=request.getParameter("pwd");
System.out.println("name="+name);
System.out.println("Password="+password);
//code here for the validating of the user and if validated send them to the
//myAccoutn.jsp
//else send to the accountError.jsp
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:ERP");
st=con.createStatement();
System.out.println("---------------------in ConnectDB/n");
System.out.println("-----------------before connect");
System.out.println("-----------------after connect..."+con);
System.out.println("-----------------create statemet");
rs=st.executeQuery("select * from erplogin where name='"+name+"' and password='"+password+"'");
System.out.println("-----------------qry exec");
if(rs.next()){
System.out.println("-----------------in If");
int auth = rs.getInt("name");
System.out.println("-----------------getting auth"+auth);
// session hass been created
session=request.getSession();
session.setAttribute("uname", name);
session.setAttribute("pwd",password);
session.setAttribute("auth",new Integer(auth));
/* TODO output your page here */
response.sendRedirect("./MyAccount.jsp");
}
else
response.sendRedirect("./error/accountError.jsp");
}catch(Exception e){
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("Signin doGet");
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("Signin doPost");
processRequest(request, response);
}
public String getServletInfo() {
return "User login";
}
private String name="";
private String password="";
HttpSession session;
private boolean boolVal;
private Statement st;
private ResultSet rs=null;
private Connection conObj;
private static int errorVal=0;
}
它给出了以下异常执行
Signin Init
Signin doPost
Signin process
name=aaa
Password=sss
name=aaa
Password=sss
---------------------in ConnectDB/n
-----------------before connect
-----------------after connect...sun.jdbc.odbc.JdbcOdbcConnection@4260ab
-----------------create statemet
-----------------qry exec
-----------------in If
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(JdbcOdbc.java:3811)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(JdbcOdbcResultSet.java:5638)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(JdbcOdbcResultSet.java:583)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(JdbcOdbcResultSet.java:601)
at SignIn.processRequest(SignIn.java:61)
at SignIn.doPost(SignIn.java:102)
排队
int auth = rs.getInt("name");
及
请帮助我解决这些错误
java.sql.SQLException:[Microsoft][ODBC驱动程序管理器]读取索引不正确的结果集rs
时,会获得无效的描述符索引
:
int auth = rs.getInt(3);
尝试使用正确的索引,列索引从
1
开始,依此类推。可能3
没有列的索引。您应该使用列名来获取数据,而不是直接使用索引。例如:假设在索引0处的第一个列名为'studentId',那么您可以通过使用int id=rs.getInt(0)得到正确的答案;但是稍后您的studentId列更改为索引号2。然后,当您访问int id=rs.getInt(0)时,您将得到错误的结果或错误。因此,在rs.get()中使用列名是安全的。例如:rs.getInt(“studentId”)。这意味着即使您的列名studentId更改为任何索引,您可以正确地访问数据。以及如何从sun.jdbc.odbc.jdbodbc.createSQLException(jdbodbc.java:6957)和sun.jdbc.odbc.jdbodbc.standardError(jdbodbc.java:7114)中取出sun.jdbc.odbc.jdbodbc.SQLGetDataInteger(jdbodbc.java:3811)它解决了描述符无效的问题,但仍然是sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(JdbcOdbc.java:3811),位于int auth=rs.getInt(“名称”);处理请求(请求、响应);在这行中,您的列名“name”类型是int类型?请检查表中“name”列的数据。如果列“name”中存在字符串,则会出现错误:例如:如果列“name”中的数据是“david”,则您不能使用rs.getInt(“name”)调用此数据,您必须使用rs.getString(“name”)。@Maddy,您的问题已解决?请告诉我您的列名的数据类型?问题已解决,但在登录时遇到另一个问题如果成功,则myaccount.jsp应打开,但accounterror.jsp已打开。不知道为什么如果语句变为false并将控件移到其他位置block@Maddy,您应该在if块中进行调试。
int auth = rs.getInt(3);