This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-csv.git

commit df3732ba2253ae35c86066d62f287a19bd14674b
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Tue Mar 12 07:24:33 2024 -0400

    Use try-with-resources to manage JDBC Clob in
    CSVPrinter.printRecords(ResultSet)
---
 src/changes/changes.xml                              |  3 ++-
 src/main/java/org/apache/commons/csv/CSVPrinter.java | 10 ++++++++--
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 0b854b7d..88dcaa6b 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -44,13 +44,14 @@
       <!-- ADD -->
       <action issue="CSV-308" type="fix" dev="ggregory" due-to="Buddhi De 
Silva, Gary Gregory">[Javadoc] Add example to CSVFormat#setHeaderComments() 
#344.</action>
       <!-- FIX -->
-      <action issue="CSV-306" type="fix" dev="ggregory" due-to="Sam Ng, Bruno 
P. Kinoshita">Replace deprecated method in user guide, update external link 
#324, #325.</action>
+      <action type="fix" issue="CSV-306" dev="ggregory" due-to="Sam Ng, Bruno 
P. Kinoshita">Replace deprecated method in user guide, update external link 
#324, #325.</action>
       <action type="fix" dev="ggregory" due-to="Seth Falco, Bruno P. 
Kinoshita">Document duplicate header behavior #309.</action>
       <action type="fix" dev="ggregory" due-to="jkbkupczyk">Add missing docs 
#328.</action>
       <action type="fix" dev="ggregory" 
due-to="step-security-bot">[StepSecurity] CI: Harden GitHub Actions #329, 
#330.</action>
       <action type="fix" issue="CSV-147" dev="ggregory" due-to="Steven 
Peterson, Benedikt Ritter, Gary Gregory, Joerg Schaible, Buddhi De Silva, 
Elliotte Rusty Harold">Better error message during faulty CSV record read 
#347.</action>
       <action type="fix" issue="CSV-310" dev="ggregory" due-to="Buddhi De 
Silva">Misleading error message when QuoteMode set to None #352.</action>
       <action type="fix" issue="CSV-311" dev="ggregory" due-to="Christian 
Feuersaenger, Gary Gregory">OutOfMemory for very long rows despite using column 
value of type Reader.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">Use 
try-with-resources to manage JDBC Clob in 
CSVPrinter.printRecords(ResultSet).</action>
       <!-- UPDATE -->
       <action type="update" dev="ggregory" due-to="Gary Gregory">Bump 
commons-io:commons-io: from 2.11.0 to 2.15.1.</action>
       <action type="update" dev="ggregory" due-to="Gary Gregory, 
Dependabot">Bump commons-parent from 57 to 67.</action>
diff --git a/src/main/java/org/apache/commons/csv/CSVPrinter.java 
b/src/main/java/org/apache/commons/csv/CSVPrinter.java
index 239744c9..468f341b 100644
--- a/src/main/java/org/apache/commons/csv/CSVPrinter.java
+++ b/src/main/java/org/apache/commons/csv/CSVPrinter.java
@@ -24,6 +24,7 @@ import static org.apache.commons.csv.Constants.SP;
 import java.io.Closeable;
 import java.io.Flushable;
 import java.io.IOException;
+import java.io.Reader;
 import java.sql.Clob;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -414,8 +415,13 @@ public final class CSVPrinter implements Flushable, 
Closeable {
         while (resultSet.next()) {
             for (int i = 1; i <= columnCount; i++) {
                 final Object object = resultSet.getObject(i);
-                // TODO Who manages the Clob? The JDBC driver or must we close 
it? Is it driver-dependent?
-                print(object instanceof Clob ? ((Clob) 
object).getCharacterStream() : object);
+                if (object instanceof Clob) {
+                    try (Reader reader = ((Clob) object).getCharacterStream()) 
{
+                        print(reader);
+                    }
+                } else {
+                    print(object);
+                }
             }
             println();
         }

Reply via email to