2012-02-07 12 views
-3

LoginServletで処理されるユーザ名&のパスワードを含むjspファイル。このサーブレットはAccess dbの検証を行います。ユーザ名&パスワードがflat_status.jspし、アクセスデシベルページのリダイレクトと一致した場合はイム取得中にエラーがサーブレット内のデータベースAccess

はここ

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); 
      } 
     } 

     } 

は例外イムは、ブラウザできます。..私を助けるany1することができますウィンドウ

java.sql.SQLException:[Microsoft] [ODBC Microsoft Access Driver]条件式のデータ型の不一致。

+0

LoginServletの58行目はどれですか?私が推測しているのは、out.println(ex.getMessage()); 'という行は、あなたがoutに書き込むので、nullに初期化されているからです。 –

+0

@ ^^ ...それは何の解決策ですか?私がPrintWriterを削除し、System.out.println(ex.getMessage())を使用したとき。送信ボタンをクリックすると空のサーブレットページが表示されます – Shaggy

+1

例外があるため、空のページが表示されます。空のページを必要としない場合は、応答ライターにエラーメッセージを出力します。 –

答えて

0

常にPreparedStatementを使用し、パスワードはMs-Accessの予約キーワードです。

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

2つのものが私に飛び出します。

最初は、initで、あなただけの追加 "のnewInstance()" なし

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

を呼び出す必要がなければならないことです。実際に、JDBC 4.0をサポートするJREを使用している場合は、 "Class.forName(...)"コールも必要ありません。

2番目は、エスケープするために二重スラッシュ パスにスラッシュがスクロールします。接続文字列を次のように変更してみてください。

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

+0

両方のものを試してみました.. :( – Shaggy