org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (Connection is closed)

398
31 мая 2018, 07:40

Пытаюсь подключиться к БД Sqlite с помощью 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();
        }
    }
}

}

Выбрасывается исключение

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)

Указывает на эту строку в методе CloseDB

stat.close();

В чем может быть проблема?

Answer 1

Вы закрываете Connection, а потом пытаетесь закрыть всё, что от него зависит.

Оставьте только conn.close(), либо закрывайте ресурсы в порядке, обратном их инициализации.

И желательно каждый ресурс перед закрытием проверять на null, например:

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

READ ALSO
Кто-нибудь работал с Neuroph studio?

Кто-нибудь работал с Neuroph studio?

Такой вопрос, создал сеть, обучил на одной выборке до ошибки в 001

219
Работа со switch

Работа со switch

Придумал пример:

196
Почему не происходит подключение к MySql с помощью JDBC?

Почему не происходит подключение к MySql с помощью JDBC?

День добрыйЯ пытаюсь через Intelij Idea подключиться к бд MySql, но выдает только огромную тучу красного текста на консоль

202
игровое поле шире экрана android studio

игровое поле шире экрана android studio

Подскажите, как сделать игровое поле шире экрана устройства? Чтобы можно было сдвигать, например комнату, видеть и взаимодействовать с объектами...

185