
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
56 lines
1.3 KiB
Plaintext
56 lines
1.3 KiB
Plaintext
== 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[]
|