== Why is this an issue? According to the JDBC specification: ____ ``++Blob++``, ``++Clob++``, and ``++NClob++`` Java objects remain valid for at least the duration of the transaction in which they are created. This could potentially result in an application running out of resources during a long running transaction. ____ === Noncompliant code example [source,java] ---- PreparedStatement ps = conn.prepareStatement("SELECT text, img from photos where author=?"); ps.setString(1,author); ResultSet rs = ps.executeQuery(); while (rs.next()) { Image image = saveImg(rs.getBlob("img").getBinaryStream()); // Noncompliant; blob is never freed image.addCaption(rs.getClob("text").getCharacterStream()); // Noncompliant } ---- === Compliant solution [source,java] ---- PreparedStatement ps = conn.prepareStatement("SELECT text, img from photos where author=?"); ps.setString(1,author); ResultSet rs = ps.executeQuery(); while (rs.next()) { Blob blob = rs.getBlob("img"); Image image = saveImg(blob.getBinaryStream()); blob.free(); Clob clob = rs.getClob("text"); image.addCaption(clob.getCharacterStream()); clob.free(); } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message * Add a "xxx.free()" call. * Free the "xxx" retrieved on this line. endif::env-github,rspecator-view[]