Java 我的servlet代码引发异常。在数据库中,一列是日期类型的签入,另一列是int类型的房间(每个日期固定10个)

Java 我的servlet代码引发异常。在数据库中,一列是日期类型的签入,另一列是int类型的房间(每个日期固定10个),java,jsp,servlets,prepared-statement,Java,Jsp,Servlets,Prepared Statement,我的数据库由两列组成,一列是Date类型,另一列是int类型。我的jsp代码是booking.jsp(这里不包括),servlet文件是booking.java,如下所示。但我点击CheckAvailability,它显示输入字符串“date”的异常 booking.java package com.dit.project; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection

我的数据库由两列组成,一列是
Date
类型,另一列是
int
类型。我的jsp代码是booking.jsp(这里不包括),servlet文件是booking.java,如下所示。但我点击CheckAvailability,它显示输入字符串“date”的异常

booking.java

package com.dit.project;    
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
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 booking extends HttpServlet {
     Connection con;
PreparedStatement pst,pst1;
ResultSet rs;
String msg;


protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException, SQLException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        con=DBService.getConnection();
        pst=con.prepareStatement("select * from database where check_in=? and rooms=?");
        int check_in=Integer.parseInt(request.getParameter("check_in"));
        int rooms=Integer.parseInt(request.getParameter("rooms"));

        pst.setInt(1,check_in);
        pst.setInt(2, rooms);
        rs=pst.executeQuery();
        if(rs.next())
        {
            int left=10-(rs.getInt(2));
            if(rooms>10 || rooms>left)
            {
                RequestDispatcher rd=request.getRequestDispatcher("booking.jsp");
                msg="<font color=red>cann't book more rooms</font>";
                request.setAttribute("msg", msg);
                rd.forward(request, response);

            }
            else{
                if(rooms==0){
                     RequestDispatcher rd=request.getRequestDispatcher("booking.jsp");
                msg="<font color=red>Sorry! ther are no rooms left</font>";
                request.setAttribute("msg", msg);
                rd.forward(request, response);
                }
                else{
                    pst1=con.prepareStatement("update database set rooms=left where check_in=rs.getInt(1)");
                    pst1.setInt(1,check_in);
                    pst1.setInt(2, rooms);
                    int i=pst1.executeUpdate();
                    if(i>0){
                          RequestDispatcher rd=request.getRequestDispatcher("booking.jsp");
                msg="<font color=red>bookings done of"+rooms+"</font>";
                request.setAttribute("msg", msg);
                rd.forward(request, response);

                    }
                }
            }

        }


    }
    catch(Exception e)
    {
        out.print(e.getMessage());
    }
    finally {
        out.close();
    }
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        processRequest(request, response);
    } catch (SQLException ex) {
        Logger.getLogger(booking.class.getName()).log(Level.SEVERE, null, ex);
    }
}


@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        processRequest(request, response);
    } catch (SQLException ex) {
        Logger.getLogger(booking.class.getName()).log(Level.SEVERE, null, ex);
    }
}

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

}
package com.dit.project;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.sql.Connection;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入javax.servlet.RequestDispatcher;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.servlet.http.HttpSession;
公共类预订扩展了HttpServlet{
连接con;
编制报表pst,pst1;
结果集rs;
串味精;
受保护的void processRequest(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException、SQLException{
setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
试一试{
con=DBService.getConnection();
pst=con.prepareStatement(“从数据库中选择*,其中check_-in=?和rooms=?”;
int check_-in=Integer.parseInt(request.getParameter(“check_-in”);
introoms=Integer.parseInt(request.getParameter(“rooms”);
pst.setInt(1,签入);
pst.setInt(2个房间);
rs=pst.executeQuery();
如果(rs.next())
{
int left=10-(rs.getInt(2));
如果(房间>10 | |房间>左侧)
{
RequestDispatcher rd=request.getRequestDispatcher(“booking.jsp”);
msg=“无法预订更多房间”;
setAttribute(“msg”,msg);
转发(请求、响应);
}
否则{
如果(房间==0){
RequestDispatcher rd=request.getRequestDispatcher(“booking.jsp”);
msg=“对不起!已经没有房间了”;
setAttribute(“msg”,msg);
转发(请求、响应);
}
否则{
pst1=con.prepareStatement(“更新数据库集房间=左侧,其中check_in=rs.getInt(1)”);
pst1.setInt(1,签入);
pst1.setInt(2个房间);
int i=pst1.executeUpdate();
如果(i>0){
RequestDispatcher rd=request.getRequestDispatcher(“booking.jsp”);
msg=“预订完成”+房间+”;
setAttribute(“msg”,msg);
转发(请求、响应);
}
}
}
}
}
捕获(例外e)
{
out.print(例如getMessage());
}
最后{
out.close();
}
}
@凌驾
受保护的void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
试一试{
processRequest(请求、响应);
}catch(SQLException-ex){
Logger.getLogger(booking.class.getName()).log(Level.SEVERE,null,ex);
}
}
@凌驾
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
试一试{
processRequest(请求、响应);
}catch(SQLException-ex){
Logger.getLogger(booking.class.getName()).log(Level.SEVERE,null,ex);
}
}
@凌驾
公共字符串getServletInfo(){
返回“简短描述”;
}// 
}

这是因为您在为
签入准备的语句中提供了错误的数据类型

当你这样做的时候

int check_-in=Integer.parseInt(request.getParameter(“check_-in”)

实际上,您正在将
check_in
参数的值(即
String
转换为
int
)。应该将其转换为
Date
类型,
java.sql.Date
类型进行精确计算。使用以下代码在准备好的语句中设置日期类型值

pst.setDate(1,java.sql.Date.valueOf(request.getParameter("check_in")));
或者,按照您现有的方法,您可以执行以下操作:

java.sql.Date check_in = java.sql.Date.valueOf(request.getParameter("check_in"));
那就做,

pst.setDate(1,check_in);

请更改您的问题标题以总结您的问题/问题,而不是您的程序。先生,我已经更改了。请告诉我我在这个程序中哪里出了问题?对不起,我不知道JSP。先生,房间和签入现在都是int类型,我已经更改了,但仍然显示null异常?@ReenaKandari null指针指向代码中的哪一行?你会尝试发布堆栈跟踪吗?或者让我知道它发生在哪一行?是的,先生,我已经跟踪了它。它出现在第'pst=con.prepareStatement'行(“从数据库中选择*,其中check_-in=?和rooms=?”),如果是这种情况,那么问题应该出在,
con=DBService.getConnection()
检查
DBService
类和
getConnection()
方法。我觉得
con
con=DBService.getConnection()之后是空的呼叫。先生,我已经检查过了,但这里似乎什么都有。