Trying to connect to the Sqlite database using JDBC.

public class HelloServlet extends HttpServlet { public static Connection conn; public static Statement stat; public static ResultSet rs; public static void Conn() throws ClassNotFoundException, SQLException, NamingException { Class.forName("org.sqlite.JDBC"); conn = DriverManager.getConnection("jdbc:sqlite:C:\\Images.db"); stat = conn.createStatement(); } public static void addPicture(String arrayPicture) throws SQLException, ClassNotFoundException { try { Conn(); String[] ss = arrayPicture.split(","); stat.execute("INSERT INTO 'ImagesItems'('ImageName','PointsArray') VALUES('" + ss[ss.length] + "','" + arrayPicture + "'"); } catch (Exception e) { System.out.println(e); } finally { CloseDB(); } } public static String getPicture(int id) throws SQLException, NamingException, ClassNotFoundException { Conn(); rs = stat.executeQuery("SELECT 'PointsArray' FROM 'ImagesItems' WHERE '_id' = " + id); String rss = rs.toString(); CloseDB(); return rss; } public static void CloseDB() throws ClassNotFoundException, SQLException { conn.close(); stat.close(); // Указывает на эту строку rs.close(); } @Override public void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { // httpServletResponse.getWriter().print("Hello from servlet"); } @Override public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String ss = ""; if ("POST".equalsIgnoreCase(req.getMethod())) { Scanner s = null; try { s = new Scanner(req.getInputStream(), "UTF-8"); while(s.hasNext()) { ss += s.nextLine(); } } catch (IOException e) { e.printStackTrace(); } } if(ss.startsWith("1")) { try { addPicture(ss); } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } else if(ss.startsWith("2")) { try { String response = getPicture(1); res.setStatus(HttpServletResponse.SC_OK); res.getOutputStream().write(response.getBytes()); res.getOutputStream().flush(); res.getOutputStream().close(); } catch (SQLException e) { e.printStackTrace(); } catch (NamingException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 

}

An exception is thrown.

 org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (Connection is closed) at org.sqlite.core.DB.newSQLException(DB.java:909) at org.sqlite.core.CoreStatement.internalClose(CoreStatement.java:115) at org.sqlite.jdbc3.JDBC3Statement.close(JDBC3Statement.java:35) at org.sqlite.jdbc4.JDBC4Statement.close(JDBC4Statement.java:27) at org.mycompany.myname.HelloServlet.CloseDB(HelloServlet.java:49) at org.mycompany.myname.HelloServlet.getPicture(HelloServlet.java:43) at org.mycompany.myname.HelloServlet.doPost(HelloServlet.java:84) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) 

Points to this line in the CloseDB method

 stat.close(); 

What could be the problem?

    1 answer 1

    You close Connection, and then try to close everything that depends on it.

    Leave only conn.close (), or close resources in the reverse order of their initialization.

    And it is desirable to check each resource before closing for null, for example:

    if (conn! = null) conn.close ();

    • It helped, thanks! - Mister Google