I am writing a Java web application for a term paper. When starting, it gives an error

SEVERE: Servlet.service() for servlet [tanat.servlet.IceFloeList] in context with path [/SalvageService] threw exception java.lang.NullPointerException at tanat.database.DBUtils.queryIceFloe(DBUtils.java:19) at tanat.servlet.IceFloeList.doGet(IceFloeList.java:47) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 

Scolding as I understood this class

 package tanat.database; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import tanat.beans.IceFloe; public class DBUtils { public static List<IceFloe> queryIceFloe(Connection conn) throws SQLException { String sql = "SELECT `id`, `name_ice_floe`, ` number_of_fishermen` " + "FROM ice_floe ORDER BY 'number_of_fishermen' DESC;"; PreparedStatement pstm = conn.prepareStatement(sql); //на эту строку ругается ResultSet rs = pstm.executeQuery(); List<IceFloe> list = new ArrayList<IceFloe>(); //пробывал через статмент ничего не меняеться // Statement statement = conn.createStatement(); // ResultSet rs = statement.executeQuery(sql); while (rs.next()) { int id = rs.getInt("ID"); String name = rs.getString("Name"); int numberOfFishermen = rs.getInt("NumberOfFishermen"); IceFloe iceFloe = new IceFloe(); iceFloe.setId(id); iceFloe.setNameIceFloe(name); iceFloe.setNumberOfFishermen(numberOfFishermen); list.add(iceFloe); } return list; } public static IceFloe findIceFloe(Connection conn, String code) throws SQLException { String sql = "Select a.Code, a.Name, a.Price from Product a where a.Code=?"; PreparedStatement pstm = conn.prepareStatement(sql); pstm.setString(1, code); ResultSet rs = pstm.executeQuery(); while (rs.next()) { String name = rs.getString("Name"); int numberOfFishermen = rs.getInt("NumberOfFishermen"); IceFloe iceFloe = new IceFloe(); iceFloe.setNameIceFloe(name); iceFloe.setNumberOfFishermen(numberOfFishermen); return iceFloe; } return null; } public static void updateIceFloe(Connection conn, IceFloe iceFloe) throws SQLException { String sql = "Update Product set Name =?, Price=? where Code=? "; PreparedStatement pstm = conn.prepareStatement(sql); pstm.setInt(1, iceFloe.getId()); pstm.setString(2, iceFloe.getnameIceFloe()); pstm.setInt(3, iceFloe.getNumberOfFishermen()); pstm.executeUpdate(); } public static void insertIceFloe(Connection conn, IceFloe iceFloe) throws SQLException { String sql = "Insert into Product(Code, Name,Price) values (?,?,?)"; PreparedStatement pstm = conn.prepareStatement(sql); pstm.setInt(1, iceFloe.getId()); pstm.setString(2, iceFloe.getnameIceFloe()); pstm.setInt(3, iceFloe.getNumberOfFishermen()); pstm.executeUpdate(); } //удаление льдины //по идее нужно реализовать автоматическое удаление если количество рыбаков становиться равным 0 public static void deleteIceFloe(Connection conn, String code) throws SQLException { String sql = "Delete From Product where Code= ?"; PreparedStatement pstm = conn.prepareStatement(sql); pstm.setString(1, code); pstm.executeUpdate(); } } 

help please, I have been busy for 3 days already, but there is little time left) if you need to look at other classes: https://bitbucket.org/pahan-titan/salvageservice/src Thanks in advance

  • Apparently null from IceFloeList.java:47 is passed to IceFloeList.java:47 . Is this just one mistake? I think you still have an error when connecting to the database is present, so you get null instead of Connection . - lampa
  • if you have a code on the line PreparedStatement pstm = conn.prepareStatement (sql), and NullPointerException is flying, then there are no options at all. The only possible one is that the variable conn refers to nowhere. You get this variable as an argument to the Connection conn method. See the code where this method is called from. It passes null to you in the variable conn. And it's easy to check this - add in front of the line that throws an exception, System.out.println (conn); If you see the coveted null in the console, then everything said is fully confirmed. - Dmitriy

1 answer 1

Since you get null in the arguments of the specified method in a variable of type Connection, you should dig into the corona of the class, the distributor connection.

Therefore, do so ... To begin, connect this https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.45 as a jdbc driver.

As far as I understood, the class distributing connections MySQLConnUtils

Write it this way

 import com.mysql.fabric.jdbc.FabricMySQLDriver; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; public class MySQLConnUtils { public static Connection getMySQLConnection() throws SQLException { String hostName = "localhost"; String dbName = "salvage_service"; String dbPort = "3306"; String userName = "root"; String password = "qweqwe123123"; String connectionURL = "jdbc:mysql://" + hostName + ":" + dbPort + "/" + dbName; Driver driver = new FabricMySQLDriver(); DriverManager.registerDriver(driver); return DriverManager.getConnection(connectionURL, userName, password); } } 

If you fail, write what error is flying.

  • Thanks a lot, helped. But now the data does not display the js page ( - Pavel Zlotarenchuk 10:06 pm
  • well, that's another problem. control the program in stages. Print to the console the data returned by the database. then see what the backend does to them, and then see what is transmitted to the front and what is happening there. the database lives by its own laws, the backend by its own, and the front by its own. Selyavi)) - Dmitriy