Не получается записать данные с html-формы в базу данных

178
15 октября 2018, 14:20

пытаюсь реализовать простейшую запись данных формы в бд. При нажатие кнопки submit данные отправляются но в базу не записываются, а сервер возвращает статус 500 и

java.lang.NullPointerException
com.cheerbuilder.controller.Controller.createNewUser(Controller.java:64)
com.cheerbuilder.controller.Controller.doGet(Controller.java:31)
com.cheerbuilder.controller.Controller.doPost(Controller.java:50)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

хотя его там никак не может быть.

Сама форма:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>User form</title>
</head>
<body>
    <form action="insert" method = 'post'>
        User id: <br>
        <input type = 'number' name = 'id'/><br>
        User name:<br>
        <input type = 'text' name = 'name'/><br>
        <button type = 'submit'>Сохранить</button>    
    </form>
</body>
</html>

Контроллер:

package com.cheerbuilder.controller;

import com.cheerbuilder.dbAccess.UserAccesser;
import com.cheerbuilder.entity.User;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;

@WebServlet("/")
public class Controller extends HttpServlet {
    UserAccesser userAccesser;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException {
        String action = req.getServletPath();
        System.out.println(action);
        switch ((action == null) ? "something" : action) {
            case "/insert" :
                createNewUser(req, resp);
                break;
                default:
                    req.getRequestDispatcher("index.jsp").forward(req,resp);
        }
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        UserAccesser userAccesser = new UserAccesser();
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException {
        doGet(req,resp);
    }

    private void createNewUser(HttpServletRequest req, HttpServletResponse 
    resp) throws IOException {
        User user = null;
        user = new User(Integer.valueOf(req.getParameter("id")),
                                        req.getParameter("name"));
        System.out.println(user);

        try {
            userAccesser.insertUser(user);
        } catch (SQLException e) {
        }
            resp.sendRedirect("index.jsp");
    }
}

DAO класс:

package com.cheerbuilder.dbAccess;
import com.cheerbuilder.entity.User;
import com.mysql.jdbc.Driver;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class UserAccesser {
    private Connection connection;
    public UserAccesser() {
        String dbUser = "root";
        String dbURL = "jdbc:mysql://localhost:3306/userdb" +
                                        "?verifyServerCertificate=false"+ 
                                        "&useSSL=false"+     
                                        "&requireSSL=false"+    
                                        "&useLegacyDatetimeCode=false"+                 
                                        "&amp" +"&serverTimezone=UTC";              

        String dbPassword = "powerlum925";

        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try {
            if ((connection == null) || (connection.isClosed())) {
                connection = DriverManager
                            .getConnection(dbURL,dbUser,dbPassword);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    /**
    * Gets user from db by id
    * @param id user's id
    * @return
    * @throws SQLException
    */
    public User selectUser(int id) throws SQLException {
        User user = null;
        String selectQuery = "SELECT * FROM users WHERE user_id = ?";
        PreparedStatement preparedStatement = connection  
                                             .prepareStatement(selectQuery);
        preparedStatement.setInt(1,id);
        ResultSet resultSet = preparedStatement.executeQuery();

        while(resultSet.next()) {
            user = new User(resultSet.getInt("user_id"),
                    resultSet.getString("name"));
        }
        preparedStatement.close();
        connection.close();

        return user;
    }

    /**
    * Gets user's list from db
    * @return
    * @throws SQLException
    */
    public List<User> selectUsers() throws SQLException {
        List<User> users = new ArrayList<>();
        String selectQuery = "SELECT * FROM users";
        PreparedStatement preparedStatement = 
                           connection.prepareStatement(selectQuery);
        ResultSet resultSet = preparedStatement.executeQuery();
        while(resultSet.next()) {
            users.add(new User(resultSet.getInt("user_id"),
                            resultSet.getString("name"))
            );

        }
        preparedStatement.close();
        connection.close();
        return users;
    }
    /**
    * Inserts user object to db
    * @param user
    * @throws SQLException
    */
    public void insertUser(User user) throws SQLException {
        String insertQuery = "INSERT INTO users VALUES (?,?)";
        PreparedStatement preparedStatement = 
                             connection.prepareStatement(insertQuery);
        preparedStatement.setInt(1,user.getId());
        preparedStatement.setString(2,user.getName());
        preparedStatement.execute();

        preparedStatement.close();
        connection.close();
    }

    /**
    * Updates user
    * @param user
    * @throws SQLException
    */
    public void updateUser(User user) throws SQLException {
        String updateQuery = "UPDATE users SET VALUES (?,?)" +
                            "WHERE user_id = ?  ";
        PreparedStatement preparedStatement = 
                                   connection.prepareStatement(updateQuery);
        preparedStatement.setInt(1,user.getId());
        preparedStatement.setString(2,user.getName());
        preparedStatement.execute();
        preparedStatement.close();
        connection.close();
    }

    /**
    * Delete user from db
    * @param user
    * @throws SQLException
    */
    public void deleteUser(User user) throws SQLException {
        String deleteQuery = "DELETE FROM users WHERE user_id = " +
                            + user.getId();
        Statement statement = connection.createStatement();
        statement.execute(deleteQuery);
        statement.close();
        connection.close();
    }
}
Answer 1

Не инициализирована переменная класса userAccesser:

UserAccesser userAccesser;

должно быть

@Override
public void init(ServletConfig config) throws ServletException {
    userAccesser = new UserAccesser();
}
READ ALSO
Mustache. Проитерировать коллекцию объектов в .mustache

Mustache. Проитерировать коллекцию объектов в .mustache

если в books передать массив значений все работает:

139
Не получается передать bundle из одного фрагмента в другой

Не получается передать bundle из одного фрагмента в другой

Из одного фрагмента передаю данные в другой фрагментКод откуда:

179
setHint(QueryHints.HINT_FETCH_SIZE, ?) в hibernate

setHint(QueryHints.HINT_FETCH_SIZE, ?) в hibernate

Решил почитать один блог

134
Как передать ресурс из одного фрагмента в другой?

Как передать ресурс из одного фрагмента в другой?

В одном фрагменте есть кнопки, по нажатию которых открывается другой

147