Пытаюсь подключиться к БД 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();
В чем может быть проблема?
Вы закрываете Connection, а потом пытаетесь закрыть всё, что от него зависит.
Оставьте только conn.close(), либо закрывайте ресурсы в порядке, обратном их инициализации.
И желательно каждый ресурс перед закрытием проверять на null, например:
if (conn != null) conn.close();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Такой вопрос, создал сеть, обучил на одной выборке до ошибки в 001
День добрыйЯ пытаюсь через Intelij Idea подключиться к бд MySql, но выдает только огромную тучу красного текста на консоль
Подскажите, как сделать игровое поле шире экрана устройства? Чтобы можно было сдвигать, например комнату, видеть и взаимодействовать с объектами...