错误:java.sql.SQLException:[Microsoft] [ODBC Microsoft Access驱动程序]条件表达式中的数据类型不匹配

时间:2014-11-07 05:15:54

标签: java

代码不允许我从数据库登录:

       package Business;

import java.io.Serializable;
import java.sql.*;


public class Student implements Serializable {

    private int iD;
    private String password;
    private String firstName;
    private String lastName;
    private String street;
    private String city;
    private String state;
    private double zip;
    private String eMail;
    private double gpa;
    private String message;

    /**
     * No arg constructor that sets the default value of all
     * customer properties to an empty string value.
     */
    public Student() {
        this.iD = 0;
        this.password = "";
        this.firstName = "";
        this.lastName = "";
        this.street = "";
        this.city = "";
        this.state = "";
        this.zip = 0;
        this.eMail = "";
        this.gpa = 0;
    }


    public void setID(int id) {
        this.iD = iD;
    }

    public void setPassword(String password) {
        this.password = password;
    }


    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }


    public void SetLastName(String lastName) {
        this.lastName = lastName;
    }


    public void setStreet(String street) {
        this.street = street;
    }

    public void setCity(String city) {
        this.city = city;
    }

      public void setState(String state) {
        this.state = state;
    }

        public void setZip(double zip) {
        this.zip = zip;
    }

          public void setEMail (String email) {
        this.eMail = email;
    }
          public void setGpa(double gpa) {
        this.gpa = gpa;
    }

    public int getID() {
        return iD;
    }


    public String getPassword() {
        return password;
    }


    public String getFirstName() {
        return firstName;
    }


    public String getLastName() {
        return lastName;
    }


    public String getStreet() {
        return street;
    }

    public String getCity() {
        return city;
    }
    public String getState() {
        return state;
    }

    public double getZip() {
        return zip;
    }
      public String getEMail() {
        return eMail;
    }

    public double getGpa() {
        return gpa;
    }
    public String getMessage() {
        return this.message;
    }


    public boolean login(String password) throws SQLException {
        boolean yes_no = false;

        /* Verify password against database password for the userId */
        if (password.equals(this.password)) {
            this.message = "Thank you, you are logged in.";
            yes_no = true;
        } else {
            this.message = "Sorry Your Login Information seems to be incorrect.";
            yes_no = false;
        }

        /* Returns true or false based on the condition statement above */
        return yes_no;
    }

    /**
     * Establishes connection with the database containing the customer information 
     * @return Connection
     */
    public Connection studentConnect() {
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        } catch (ClassNotFoundException e) {
            System.out.println("Errors: " + e);
        }

        Connection connect = null;
        try {
            connect = DriverManager.getConnection("jdbc:odbc:RegisDB");
        } catch (SQLException e) {
            System.out.println("You have Errors: " + e);
        }

        return connect;
    }

    /**
     * Takes the student Id and retrieves the information from the customers
     * data table and stores it in the properties of the customer object.
     * @param iD
     * @throws SQLException 
     */
    public void findDB(int iD)  {

        Connection con = studentConnect();
        Statement statement = null;
        ResultSet result = null;

        String sql = "Select * From Students Where iD = " + iD + ";";

        try {
            statement = con.createStatement();
            result = statement.executeQuery(sql);
            while (result.next()) {
                this.iD = result.getInt("iD");
                this.password = result.getString("password");
                this.firstName = result.getString("firstName");
                this.lastName = result.getString("lastName");
                this.street = result.getString("street");
                this.city = result.getString("city");
                this.state = result.getString("state");
                this.zip = result.getDouble("zip");
                this.eMail = result.getString("eMail");
                this.gpa = result.getDouble("gpa");
            }
            con.close();

        } catch (SQLException e) {
            System.out.println("Errors: " + e);
        } 
    }

    /**
     * Takes in the parameters of the customer database and inserts the parameters taken into 
     * the database for the addition of customers to the database.
      * @param password
     * @param firstName
     * @param lastName
     * @param street
     * @param city
     * @param state
      * @param zip
     * @param email
     * @param gpa
     * @throws SQLException 
     */
    public void insertDB(String password, String firstName, String lastName, String street, String city, String state, double zip, String email, double gpa) throws SQLException {
        Connection con = studentConnect();
        Statement statement;
        ResultSet result;
        int resultVal;
        String sql = "INSERT INTO Students (password, firstName, lastName, street, city, state, zip, eMail, gpa) VALUES ('" + password + "','" + firstName + "','" + lastName + "','" + street + "','" + city +"','" + state +"','" + zip + "','" + eMail +"','" + gpa + "');";

        try {
            statement = con.createStatement();
            resultVal = statement.executeUpdate(sql);

            System.out.println(resultVal);
        } catch (SQLException e) {
            System.out.println("Error: " + e);
            System.out.println(e.getStackTrace());
        } finally {
            con.close();
        }
    }

    /**
     * Takes in student id and locates the customer in the database, performs
     * an sql update and deletes the customer from the database.
     * @param iD
     * @throws SQLException 
     */
    public void deleteDB(int iD) throws SQLException {
        Connection con = studentConnect();
        Statement statement;
        int resultVal;

        String sql = "DELETE FROM Students WHERE iD = " + iD + "';";

        try {
            statement = con.createStatement();
            resultVal = statement.executeUpdate(sql);
            System.out.println(resultVal);
        } catch (SQLException e) {
            System.out.println("Errors: " + e);
        } finally {
            con.close();
        }
    }
}

我尝试登录后会收到错误页面 错误:java.sql.SQLException:[Microsoft] [ODBC Microsoft Access驱动程序]条件表达式中的数据类型不匹配。

错误。

这是我的Servlet:

@WebServlet(urlPatterns = {"/StudentLoginServlet"})
public class StudentLoginServlet extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */

            String iD = request.getParameter("iD");
            String pw = request.getParameter("pw");
            System.out.println(iD);
            System.out.println(pw);


            Student s1=new Student();
            s1.findDB(iD);


            String fn=s1.getFirstName();
            System.out.println(fn);

            String ln=s1.getLastName();
            System.out.println(ln);

            String pwdb=s1.getPassword();
            System.out.println(pwdb);
            RequestDispatcher rd;

            HttpSession ses1=request.getSession();
            ses1.setAttribute("s1", s1);

            if (pw.equals(pwdb)){
                rd= request.getRequestDispatcher("/ViewStudentSchedule.jsp");
                rd.forward(request,response);

            }
            else{
                rd= request.getRequestDispatcher("/LoginError.jsp");
                rd.forward(request,response);   

            }

        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */

    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

旁注:

该表被称为&#34;学生&#34;在数据库中 我正在访问以下内容(正确的大小/按数据库顺序):

ID 密码 名字 姓 街 市 州 压缩 电子邮件 GPA

2 个答案:

答案 0 :(得分:0)

该错误表明数据库中的iD列是数字的;但是你试图将它与String值进行比较。您需要更改数据库,以便iD列是某种varchartext字段。

答案 1 :(得分:0)

从您的查询中删除单引号,例如

String sql =&#34;选择*来自学生,其中iD =&#34; + iD +&#34 ;;&#34 ;;