代码不允许我从数据库登录:
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
答案 0 :(得分:0)
该错误表明数据库中的iD
列是数字的;但是你试图将它与String
值进行比较。您需要更改数据库,以便iD
列是某种varchar
或text
字段。
答案 1 :(得分:0)
从您的查询中删除单引号,例如
String sql =&#34;选择*来自学生,其中iD =&#34; + iD +&#34 ;;&#34 ;;