Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #35270

Re: Not closing connections and statements

From Arne Vajhøj <arne@vajhoej.dk>
Newsgroups comp.lang.java.programmer
Subject Re: Not closing connections and statements
Date 2016-08-12 09:15 -0400
Organization Aioe.org NNTP Server
Message-ID <noki5t$1bkc$1@gioia.aioe.org> (permalink)
References <87shuakxjq.fsf@Equus.decebal.nl>

Show all headers | View raw


On 8/12/2016 7:59 AM, Cecil Westerhof wrote:
> As I understood it you should close your SQL connections and
> statements before quitting a program. How bad is this when that does
> not happen?
>
> At the moment I am writing a general function to log memory usage to a
> SQLite database to be used by different applications. How bad would it
> be if a program would exit without cleanly closing the connection and
> statement?

Not closing the connection is a very bad practice.

In a long running program then it can cause your application/database
to run out of connections without needing to.

In a standalone program that exits quickly, then the practical
impact may be little, but it is a very bad habit.

And when people get that habit for standalone programs that exits
quickly then they sometimes carry it over to long running programs.

Don't do it!

Not closing statements is not so bad. I believe that somewhere
in the JDBC spec it promise that all statements associated with
a connection get closed when the connection is closed.

I still recommend closing statements though. Just in case
the JDBC driver implementor forgot this little quirk.

> The beginning of my code is at the moment:
>     public static boolean freeMemoryThread(final String className, final String database) {
>         final long                     divideValue  = 1024 * 1024;
>         final Runtime                  rt           = Runtime.getRuntime();
>         final ScheduledExecutorService ses          = Executors.newSingleThreadScheduledExecutor();
>
>         Connection  conn = null;
>         ResultSet   rs   = null;
>         Statement   stmt = null;
>
>         logMessage(className + ", " + database);
>         try {
>             Class.forName("org.sqlite.JDBC");
>             conn    = DriverManager.getConnection("jdbc:sqlite:" + database);
>             stmt    = conn.createStatement();
>             rs      = stmt.executeQuery("SELECT SQLITE_VERSION() AS SQLiteVersion;");
>             rs.next();
>             logMessage(String.format("Using SQLite %s", rs.getString("SQLiteVersion")));
>             rs      = null;
>         } catch (Exception e) {
>             logMessage("Could not connect with the database: " + e.getMessage());
>             return false;
>         }
>         ses.scheduleAtFixedRate(new Runnable() {

With a ScheduledExecutor then I assume that it may not be exiting
that quickly.

(but on the good side then SQLite is an embedded database, so the
resource leak may be less critical)

Anyway - why not just close?

And if you are on Java 1.7 or later then use the AutoCloseable
feature:

try(Connection con = DriverManager.getConnection(conurl)) {
     // use con and don't worry about closing
}

You do not even need to call close anywhere (normal flow,
exception flow).

Arne

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Not closing connections and statements Cecil Westerhof <Cecil@decebal.nl> - 2016-08-12 13:59 +0200
  Re: Not closing connections and statements Arne Vajhøj <arne@vajhoej.dk> - 2016-08-12 09:15 -0400
    Re: Not closing connections and statements Arne Vajhøj <arne@vajhoej.dk> - 2016-08-12 09:39 -0400
    Re: Not closing connections and statements Marcel Mueller <news.5.maazl@spamgourmet.org> - 2016-08-12 22:31 +0200
      Re: Not closing connections and statements Arne Vajhøj <arne@vajhoej.dk> - 2016-08-12 22:04 -0400
        Re: Not closing connections and statements Marcel Mueller <news.5.maazl@spamgourmet.org> - 2016-08-13 07:55 +0200
  Re: Not closing connections and statements Martin Gregorie <martin@address-in-sig.invalid> - 2016-08-12 19:01 +0000
    Re: Not closing connections and statements Marcel Mueller <news.5.maazl@spamgourmet.org> - 2016-08-12 22:35 +0200
      Re: Not closing connections and statements Arne Vajhøj <arne@vajhoej.dk> - 2016-08-12 21:52 -0400
    Re: Not closing connections and statements Cecil Westerhof <Cecil@decebal.nl> - 2016-08-12 23:55 +0200
      Re: Not closing connections and statements Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-08-12 18:16 -0400
        Re: Not closing connections and statements Cecil Westerhof <Cecil@decebal.nl> - 2016-08-13 01:19 +0200
          Re: Not closing connections and statements Martin Gregorie <martin@address-in-sig.invalid> - 2016-08-13 00:21 +0000
            Re: Not closing connections and statements Gunter Herrmann <gunter.herrmann@earthlink.net> - 2016-08-17 16:38 -0400
      Re: Not closing connections and statements Arne Vajhøj <arne@vajhoej.dk> - 2016-08-12 21:58 -0400
        Re: Not closing connections and statements Cecil Westerhof <Cecil@decebal.nl> - 2016-08-13 12:50 +0200
      Re: Not closing connections and statements Arne Vajhøj <arne@vajhoej.dk> - 2016-08-12 21:59 -0400
      Re: Not closing connections and statements Marcel Mueller <news.5.maazl@spamgourmet.org> - 2016-08-13 08:47 +0200
        Re: Not closing connections and statements Andreas Leitgeb <avl@logic.at> - 2016-08-13 08:05 +0000
          Re: Not closing connections and statements Cecil Westerhof <Cecil@decebal.nl> - 2016-08-13 12:21 +0200
          Re: Not closing connections and statements Arne Vajhøj <arne@vajhoej.dk> - 2016-08-13 09:54 -0400
        Re: Not closing connections and statements Cecil Westerhof <Cecil@decebal.nl> - 2016-08-13 12:19 +0200
        Re: Not closing connections and statements Arne Vajhøj <arne@vajhoej.dk> - 2016-08-13 10:04 -0400
          log4j RollingFileAppender (was: Not closing connections and statements) Marcel Mueller <news.5.maazl@spamgourmet.org> - 2016-08-14 22:24 +0200
            Re: log4j RollingFileAppender Arne Vajhøj <arne@vajhoej.dk> - 2016-08-14 21:01 -0400
        Re: Not closing connections and statements Arne Vajhøj <arne@vajhoej.dk> - 2016-08-13 11:58 -0400
          logging (was: Not closing connections and statements) Marcel Mueller <news.5.maazl@spamgourmet.org> - 2016-08-14 23:46 +0200
    Re: Not closing connections and statements Arne Vajhøj <arne@vajhoej.dk> - 2016-08-12 21:44 -0400
  Re: Not closing connections and statements Florian Weimer <fw@deneb.enyo.de> - 2016-08-13 16:33 +0200
    Re: Not closing connections and statements Cecil Westerhof <Cecil@decebal.nl> - 2016-08-13 17:34 +0200

csiph-web