bug fixed for DruidPooledStatement trace ResultSet, fix #4254

This commit is contained in:
高铁
2021-05-06 19:33:38 +08:00
parent b28343a7de
commit 45e8206dff
2 changed files with 20 additions and 10 deletions
@@ -55,7 +55,19 @@ public class DruidPooledStatement extends PoolableWrapper implements Statement {
protected void addResultSetTrace(ResultSet resultSet) {
if (resultSetTrace == null) {
resultSetTrace = new ArrayList<ResultSet>(1);
} else if (resultSetTrace.size() > 0) {
int lastIndex = resultSetTrace.size() - 1;
ResultSet lastResultSet = resultSetTrace.get(lastIndex);
try {
if (lastResultSet.isClosed()) {
resultSetTrace.set(lastIndex, resultSet);
return;
}
} catch (SQLException ex) {
// skip
}
}
resultSetTrace.add(resultSet);
}
@@ -17,16 +17,7 @@ package com.alibaba.druid.bvt.pool.basic;
import java.io.InputStream;
import java.io.Reader;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Date;
import java.sql.NClob;
import java.sql.RowId;
import java.sql.SQLException;
import java.sql.SQLXML;
import java.sql.Time;
import java.sql.Timestamp;
import java.sql.Types;
import java.sql.*;
import org.junit.Assert;
import junit.framework.TestCase;
@@ -73,6 +64,13 @@ public class PoolableCallableStatementTest extends TestCase {
Assert.assertEquals(2, raw.getOutParameters().size());
}
public void test_executeQuery_large() throws Exception {
for (int i = 0; i < 1000 * 1000; ++i) {
ResultSet rs = stmt.executeQuery();
rs.close();
}
}
public void test_basic() throws Exception {
Assert.assertEquals(raw, stmt.getCallableStatementRaw());
}