пытаюсь реализовать простейшую запись данных формы в бд. При нажатие кнопки 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"+
"&" +"&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();
}
}
Не инициализирована переменная класса userAccesser
:
UserAccesser userAccesser;
должно быть
@Override
public void init(ServletConfig config) throws ServletException {
userAccesser = new UserAccesser();
}
если в books передать массив значений все работает:
Из одного фрагмента передаю данные в другой фрагментКод откуда:
В одном фрагменте есть кнопки, по нажатию которых открывается другой