2012-02-07 30 views
-3

jsp文件,其中包含用户名&在LoginServlet处理的密码...此servlet在Access数据库中执行验证。但即时得到错误在Servlet中访问数据库

如果用户名密码&与Access数据库则页面重定向匹配flat_status.jsp

可以ANY1帮我..

package Validate; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.*; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

public class LoginServlet extends HttpServlet{ 

    @Override 
    public void init(ServletConfig config) throws ServletException 
    { 
     super.init(config); 
      try 
     { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     } 
     catch (Exception ex) 
     { 
      System.out.println("Initialize connector string"); 
     } 
     } 
    @Override 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
       Connection conn; 
    Statement st; 
    ResultSet rs; 
    PrintWriter pw = response.getWriter(); 
     String userName = request.getParameter("username"); 
    String password = request.getParameter("password"); 
     HttpSession session = request.getSession(true); 
     response.setContentType("text/html"); 
      try 
      { 
       conn=DriverManager.getConnection("jdbc:odbc:FBS"); 
       st=conn.createStatement(); 
       rs=st.executeQuery("select UserName,Password from user_login where UserName='"+userName+"' and Password='"+password+"'"); 
       while(rs.next()) 
       { 
        session.setAttribute("USerName",userName); 
        RequestDispatcher dispatch=request.getRequestDispatcher("/flat_status.jsp"); 
        dispatch.forward(request, response); 
       } 
      st.close(); 
      rs.close(); 
      conn.close(); 
      } 
      catch (SQLException ex) 
      { 
        pw.println(ex); 
      } 
     } 

     } 

下面是异常的IM在浏览器中获取窗口

java.sql.SQLException:[Microsoft] [ODBC Microsoft Access Driver]标准表达式中的数据类型不匹配。

+0

哪一行是LoginServlet的第58行?我的猜测是它是'out.println'(ex.getMessage());',因为你写出来了,它被初始化为null。 – 2012-02-07 15:07:05

+0

@ ^^ ...这是什么解决方案?当我删除PrintWriter和使用System.out.println(ex.getMessage());它显示空的servlet页面后点击提交按钮 – Shaggy 2012-02-07 16:55:09

+1

它显示你一个空的页面,因为你有一个例外。如果您不想要空白页面,则向响应写入程序输出错误消息。 – 2012-02-07 17:21:41

回答

0

在Ms-Access中始终使用PreparedStatement和Password是reserved关键字。

boolean userFound=false; 

    conn=DriverManager.getConnection("jdbc:odbc:FBS"); 
    String sql="select [UserName],[Password] from user_login 
          where [UserName]=? and [Password]=?"; 
    PreparedStatement st=conn.prepareStatement(sql); 
    st.setString1(1,userName); 
    st.setString1(2,password); 
    rs=st.executeQuery(); 

    if(rs.next()) 
    { 
    userFound=true; 
    } 
    st.close(); 
    conn.close(); 

if(userFound) 
    { 
    } 
0

有两件事情在我身上跳出来。

首先是在init,你应该只需要调用

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 

无需额外 “的newInstance()”。事实上,如果您使用的是支持JDBC 4.0的JRE,则甚至不需要“Class.forName(...)”调用

第二个是您应该只需要双斜杠即可 在路径中正斜杠。尝试将连接字符串更改为:

conn=DriverManager.getConnection("jdbc:odbc:FBS={Microsoft Access Driver(*.accdb)};DBQ=C:\\Users\\Dumbre\\Documents\\NetBeansProjects\\Flat Booking System\\Flat_System.accdb;"); 

此外,您可能会尝试切换到DSN,仅用于测试。创建系统DSN 和您的连接字符串应该是:

jdbc:odbc:TheNameForTheNewDSNThatYouJustCreated 

嗯,很明显的是最后一部分必须是实际名称。

+0

肯定会试一试,让你知道.. !! – Shaggy 2012-02-07 16:44:52

+0

不能正常工作。 – Shaggy 2012-02-07 16:59:20