【问题标题】:Java JDBC Nullpointer when inserting插入时的 Java JDBC Nullpointer
【发布时间】:2015-10-14 21:07:49
【问题描述】:

每当我尝试使用 jdbc 将值插入到表中时,我都会得到一个空指针,我根本不知道为什么。

它应该像这样工作:我在 JSP 上的文本字段中输入数据。当我按下提交按钮时,servlet 应该将参数从文本字段发送到数据访问类。与数据库的连接有效,因为我可以从 x 中选择 * 作为简单测试。字符串应添加到以下 SQL 表中:

create table bedrijf(
bedrijfID           int not null AUTO_INCREMENT,
naam    varchar(80) not null,
postcode                varchar(10),
gemeente                varchar(50),
website            varchar(50),
primary key (bedrijfID)
);

JSP 发送参数:

<table id="indextabel">
            <form action="StartServlet" method="post">
                <tr>
                    <td><label for="bedrijfnaam">Naam bedrijf</label></td>
                    <td><input type="text" name="bedrijfnaam" id="bedrijfnaam"/></td>
                </tr>
                <tr>
                    <td><label for="postcode">Postcode</label></td>
                    <td><input type="text" name="postcode" id="postcode"/></td>
                </tr>
                <tr>
                    <td><label for="gemeente">Gemeente</label></td>
                    <td><input type="text" name="gemeente" id="gemeente"/></td>
                </tr>
                <tr>
                    <td><label for="website">Website</label></td>
                    <td><input type="text" name="website" id="website"/></td>
                </tr>
                 <tr>
                    <td><input type="submit" value="Registreer nu" name="nieuwbedrijf-validate"/></td>
                </tr>
            </form>

        </table>

数据访问类:

import info.toegepaste.www.beans.Account;
import info.toegepaste.www.beans.Alumnus;
import info.toegepaste.www.beans.Bedrijf;
import info.toegepaste.www.beans.Event;
import info.toegepaste.www.beans.Inschrijving;
import info.toegepaste.www.beans.Richting;
import java.sql.Connection;
import java.util.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

public class DABedrijf {
    private Connection connection = null;

  public DABedrijf(String url, String login, String password, String driver) throws ClassNotFoundException, SQLException {
      // Class.forName("com.mysql.jdbc.Driver");
      Class.forName(driver);
      connection = DriverManager.getConnection(url, login, password);
  }

  public void close() throws SQLException {
    if (connection != null) {
      connection.close();
    }
  }

    public ArrayList<Bedrijf> getAlleBedrijven(){
        Statement statement = null;
        ResultSet resultSet = null;
        ArrayList<Bedrijf> bedrijven = new ArrayList<>();

        try {

            statement = connection.createStatement();
            resultSet = statement.executeQuery("select * from bedrijf order by bedrijf.naam");

            while (resultSet.next()) {
                Bedrijf bedrijf = new Bedrijf();
                bedrijf.setBedrijfid(resultSet.getInt("bedrijf.bedrijfid"));
                bedrijf.setNaam(resultSet.getString("bedrijf.naam"));
                bedrijf.setPostcode(resultSet.getString("bedrijf.postcode"));
                bedrijf.setGemeente(resultSet.getString("bedrijf.gemeente"));
                bedrijf.setWebsite(resultSet.getString("bedrijf.website"));


                bedrijven.add(bedrijf);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {

                statement.close();

                if (resultSet != null) {
                    resultSet.close();
                }
            } catch (SQLException e) {
            }
        }
        return bedrijven;
  }
      public boolean bedrijfInsert(String naam, String postcode, String gemeente, String website) {
        boolean resultaat = true;
        PreparedStatement statement = null;
        try {
            statement = connection.prepareStatement("Insert into bedrijf values (null,?,?,?,?)");

            statement.setString(1, naam);
            statement.setString(2, postcode);
            statement.setString(3, gemeente);
            statement.setString(4, website);
            statement.executeUpdate();
        } catch (Exception e) {
            resultaat = false;
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
            }
        }
        return resultaat;
    }
}

Servlet:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package info.toegepaste.www;

import info.toegepaste.www.beans.Account;
import info.toegepaste.www.beans.Bedrijf;
import info.toegepaste.www.beans.Alumnus;
import info.toegepaste.www.beans.Event;
import info.toegepaste.www.beans.Inschrijving;
import info.toegepaste.www.beans.Richting;
import info.toegepaste.www.dataaccess.DAAccount;
import info.toegepaste.www.dataaccess.DAAlumnus;
import info.toegepaste.www.dataaccess.DABedrijf;
import info.toegepaste.www.dataaccess.DAEvent;
import info.toegepaste.www.dataaccess.DAInschrijving;
import info.toegepaste.www.dataaccess.DARichting;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Locale;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


@WebServlet(name = "StartServlet", urlPatterns = {"/StartServlet"}, 
        initParams = {
            @WebInitParam(name = "url", value = "jdbc:mysql://localhost/lesson"),
            @WebInitParam(name = "login", value = "dba"),
            @WebInitParam(name = "password", value = "sql"),
            @WebInitParam(name = "driver", value = "com.mysql.jdbc.Driver")})


public class StartServlet extends HttpServlet {



    private DAAccount daaccount = null;
    private DAAlumnus daalumnus = null;
    private DABedrijf dabedrijf = null;
    private DAEvent daevent = null;
    private DAInschrijving dainschrijving = null;
    private DARichting darichting = null;

    @Override
    public void init() throws ServletException {
        try {
            String url = getInitParameter("url");
            String password = getInitParameter("password");
            String login = getInitParameter("login");
            String driver = getInitParameter("driver");
            if (daaccount == null) {
                daaccount = new DAAccount(url, login, password, driver);
            }
            if (daalumnus == null) {
                daalumnus = new DAAlumnus(url, login, password, driver);
            }

            if (dabedrijf == null) {
                dabedrijf = new DABedrijf(url, login, password, driver);
            }
            if (daevent == null) {
                daevent = new DAEvent(url, login, password, driver);
            }
            if (dainschrijving == null) {
                dainschrijving = new DAInschrijving(url, login, password, driver);
            }
            if (darichting == null) {
                darichting = new DARichting(url, login, password, driver);
            }

        } catch (ClassNotFoundException | SQLException e) {
            throw new ServletException(e);
        }
    }

    @Override
    public void destroy() {
        try {
            if (daaccount != null) {
                daaccount.close();
            }
            if (daalumnus != null) {
                daalumnus.close();
            }
            if (dabedrijf != null) {
                daevent.close();
            }
            if (dainschrijving != null) {
                dainschrijving.close();
            }
            if (darichting != null) {
                darichting.close();
            }

        } catch (SQLException e) {
        }
    }

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        HttpSession session = request.getSession();
        RequestDispatcher rd = null;


        if (request.getParameter("registreer-button") != null) {
             ArrayList<Event> eventen = daevent.getAlleEventen();
             ArrayList<Bedrijf> bedrijven = dabedrijf.getAlleBedrijven();
             ArrayList<Richting> richtingen = darichting.getAlleRichtingen();

             request.setAttribute("eventen", eventen);
             request.setAttribute("bedrijven", bedrijven);
             request.setAttribute("richtingen", richtingen);

            rd = request.getRequestDispatcher("registreer.jsp");
        } else if (request.getParameter("inlog-knop") != null) {
            rd = request.getRequestDispatcher("inlog.jsp");

        } else if (request.getParameter("nieuwbedrijf-validate") != null) {

            String naam = request.getParameter("bedrijfnaam");
            String postcode = request.getParameter("postcode");
            String gemeente = request.getParameter("gemeente");
            String website = request.getParameter("website");

            if(dabedrijf.bedrijfInsert(naam, postcode, gemeente, website));{
            ArrayList<Bedrijf> bedrijven = dabedrijf.getAlleBedrijven();
        request.setAttribute("bedrijven", bedrijven);
        rd = request.getRequestDispatcher("registreer.jsp");}

        } else if (request.getParameter("nieuwbedrijf-knop") !=null) {
            rd = request.getRequestDispatcher("nieuwbedrijf.jsp");

        } else if (request.getParameter("registreer-validatie") !=null) {

            int richtingid = Integer.parseInt(request.getParameter("richting"));
            int bedrijfid = Integer.parseInt(request.getParameter("bedrijf"));
            String voornaam = request.getParameter("voornaam");
            String achternaam = request.getParameter("achternaam");
            String emailprive = request.getParameter("emailprive");
            String afstudeerjaar = request.getParameter("afstudeerjaar");
           String date = request.getParameter("date");
           java.sql.Date dateConvert = java.sql.Date.valueOf(date);
           String inlognaam = request.getParameter("inlognaam");
           String paswoord = request.getParameter("paswoord");

           if(daaccount.accountInsert(inlognaam, paswoord));{
           ArrayList<Account> accounts = daaccount.getAlleAccounts();
            request.setAttribute("accounts", accounts);}
           rd = request.getRequestDispatcher("registratiegelukt.jsp");

//            if(daaccount.accountInsert(voornaam, date));{
//            rd = request.getRequestDispatcher("registratiegelukt.jsp");
//            
//            } 
//            if(daalumnus.alumnusInsert(richtingid, bedrijfid, voornaam, achternaam, emailprive, afstudeerjaar, dateConvert));{
//      rd = request.getRequestDispatcher("registratiegelukt.jsp");}
//            } else {
//      request.setAttribute("fout", "Toevoegen alumni niet gelukt!");
//      rd = request.getRequestDispatcher("index.jsp");
//    }

        }


        rd.forward(request, response);

    }

我真的不知道问题出在哪里,不胜感激。

堆栈跟踪:

Warning:   StandardWrapperValve[StartServlet]: Servlet.service() for servlet StartServlet threw exception
java.lang.NullPointerException
    at org.apache.jsp.registreer_jsp._jspService(registreer_jsp.java:135)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:875)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:739)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:575)
    at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:546)
    at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:428)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:378)
    at info.toegepaste.www.StartServlet.processRequest(StartServlet.java:182)
    at info.toegepaste.www.StartServlet.doPost(StartServlet.java:212)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
    at java.lang.Thread.run(Thread.java:745)

【问题讨论】:

  • 请显示堆栈跟踪。
  • “我真的不知道问题出在哪里”。堆栈跟踪应该告诉你 NPE 来自哪里,确定吗?
  • 我已经添加了警告列表,但是我没有得到更明智的选择。抱歉,我是新手。
  • 堆栈跟踪非常具有描述性。你在 StartServlet.java 第 182 行有什么
  • 感谢您到目前为止的回答。我已经用整个 servlet 编辑了原始帖子。第 182 行是 rd.forward(request, response);

标签: java jsp servlets jdbc insert


【解决方案1】:

问题在registreer.jsp文件中

servlet 将请求分派给这个 jsp。 在执行这个jsp时,它会抛出这个异常。

在 tomcat 的 web 应用程序文件夹中,尝试找到 registreer_jsp.java 文件并在该文件中查找第 135 行,因为它是有问题的行

【讨论】:

    【解决方案2】:

    您正试图在一个为空的对象上调用方法(registreer_jsp.java:135)

    请调试找到null变量在哪里,或者直接看jsp应该比较明显。

    【讨论】:

      猜你喜欢
      • 2018-07-29
      • 1970-01-01
      • 2011-03-28
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多