You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by er...@apache.org on 2023/02/08 05:32:34 UTC

[iotdb] 01/01: Fix IT error by parallel suites

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

ericpai pushed a commit to branch bugfix/disable-thread-parallel
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 8ad1f082002040a7db10692bf4f6e769245a9d09
Author: ericpai <er...@hotmail.com>
AuthorDate: Wed Feb 8 13:32:18 2023 +0800

    Fix IT error by parallel suites
---
 integration-test/pom.xml                           |   7 +-
 .../iotdb/it/env/cluster/MppCommonConfig.java      |   2 +-
 .../org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java |  16 +-
 .../db/it/schema/IoTDBAutoCreateSchemaIT.java      |  48 +-
 .../it/schema/IoTDBCreateAlignedTimeseriesIT.java  |  55 +-
 .../db/it/schema/IoTDBCreateStorageGroupIT.java    |  71 +-
 .../db/it/schema/IoTDBDeactivateTemplateIT.java    | 288 ++++----
 .../it/schema/IoTDBDeleteAlignedTimeseriesIT.java  | 199 +++---
 .../db/it/schema/IoTDBDeleteTimeseriesIT.java      | 504 +++++++-------
 .../iotdb/db/it/schema/IoTDBSchemaTemplateIT.java  | 751 +++++++++++----------
 10 files changed, 992 insertions(+), 949 deletions(-)

diff --git a/integration-test/pom.xml b/integration-test/pom.xml
index 21e5aa7bda..05f3dd2fef 100644
--- a/integration-test/pom.xml
+++ b/integration-test/pom.xml
@@ -30,11 +30,9 @@
     <artifactId>integration-test</artifactId>
     <properties>
         <integrationTest.forkCount>1</integrationTest.forkCount>
-        <integrationTest.threadCount>1</integrationTest.threadCount>
         <integrationTest.randomSelectWriteNode>true</integrationTest.randomSelectWriteNode>
         <integrationTest.readAndVerifyWithMultiNode>true</integrationTest.readAndVerifyWithMultiNode>
         <integrationTest.launchNodeInSameJVM>true</integrationTest.launchNodeInSameJVM>
-        <integrationTest.parallelMode>suitesAndClasses</integrationTest.parallelMode>
         <integrationTest.nodeMaxHeapSize>200m</integrationTest.nodeMaxHeapSize>
         <integrationTest.nodeNewHeapSize>200m</integrationTest.nodeNewHeapSize>
         <integrationTest.testEnv/>
@@ -208,8 +206,7 @@
                             <groups>${integrationTest.includedGroups}</groups>
                             <excludedGroups>${integrationTest.excludedGroups}</excludedGroups>
                             <useSystemClassLoader>false</useSystemClassLoader>
-                            <parallel>${integrationTest.parallelMode}</parallel>
-                            <threadCount>${integrationTest.threadCount}</threadCount>
+                            <parallel>none</parallel>
                             <forkCount>${integrationTest.forkCount}</forkCount>
                             <reuseForks>false</reuseForks>
                             <systemPropertyVariables>
@@ -262,7 +259,6 @@
                 <integrationTest.launchNodeInSameJVM>false</integrationTest.launchNodeInSameJVM>
                 <integrationTest.randomSelectWriteNode>false</integrationTest.randomSelectWriteNode>
                 <integrationTest.readAndVerifyWithMultiNode>false</integrationTest.readAndVerifyWithMultiNode>
-                <integrationTest.parallelMode>suitesAndClasses</integrationTest.parallelMode>
             </properties>
             <activation>
                 <activeByDefault>true</activeByDefault>
@@ -289,7 +285,6 @@
                 <integrationTest.launchNodeInSameJVM>false</integrationTest.launchNodeInSameJVM>
                 <integrationTest.randomSelectWriteNode>true</integrationTest.randomSelectWriteNode>
                 <integrationTest.readAndVerifyWithMultiNode>true</integrationTest.readAndVerifyWithMultiNode>
-                <integrationTest.parallelMode>suitesAndClasses</integrationTest.parallelMode>
             </properties>
             <activation>
                 <activeByDefault>false</activeByDefault>
diff --git a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/MppCommonConfig.java b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/MppCommonConfig.java
index 0fcefef7c0..37c86f1746 100644
--- a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/MppCommonConfig.java
+++ b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/MppCommonConfig.java
@@ -332,6 +332,6 @@ public class MppCommonConfig extends MppBaseConfig implements CommonConfig {
   @Override
   public CommonConfig setSchemaMemoryAllocate(String schemaMemoryAllocate) {
     setProperty("schema_memory_allocate_proportion", String.valueOf(schemaMemoryAllocate));
-    return null;
+    return this;
   }
 }
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java
index 082b89fdca..9e31abed80 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java
@@ -41,6 +41,7 @@ import java.sql.Statement;
 import java.sql.Types;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import static org.junit.Assert.assertEquals;
@@ -122,25 +123,26 @@ public class IoTDBSimpleQueryIT {
           "create timeseries root.turbine.d2.s1 with datatype=FLOAT, encoding=GORILLA, compression=SNAPPY");
       statement.execute("insert into root.turbine.d1(timestamp,s1,s2) values(1,1,2)");
 
-      String[] results = {"root.turbine.d1.s1", "root.turbine.d1.s2"};
+      List<String> expected = Arrays.asList("root.turbine.d1.s1", "root.turbine.d1.s2");
+      List<String> actual = new ArrayList<>();
 
-      int count = 0;
       try (ResultSet resultSet = statement.executeQuery("select last ** from root")) {
         while (resultSet.next()) {
-          String path = resultSet.getString(ColumnHeaderConstant.TIMESERIES);
-          assertEquals(results[count], path);
-          count++;
+          actual.add(resultSet.getString(ColumnHeaderConstant.TIMESERIES));
         }
       }
 
-      assertEquals(2, count);
+      assertEquals(expected, actual);
 
+      actual.clear();
       try (ResultSet resultSet = statement.executeQuery("select last * from root")) {
         while (resultSet.next()) {
-          count++;
+          actual.add(resultSet.getString(ColumnHeaderConstant.TIMESERIES));
         }
       }
 
+      assertEquals(Collections.emptyList(), actual);
+
     } catch (Exception e) {
       e.printStackTrace();
     }
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBAutoCreateSchemaIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBAutoCreateSchemaIT.java
index 2b9a6aa647..9c1939156b 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBAutoCreateSchemaIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBAutoCreateSchemaIT.java
@@ -50,21 +50,14 @@ import java.util.Set;
 @RunWith(IoTDBTestRunner.class)
 @Category({LocalStandaloneIT.class, ClusterIT.class})
 public class IoTDBAutoCreateSchemaIT {
-  private Statement statement;
-  private Connection connection;
 
   @Before
   public void setUp() throws Exception {
     EnvFactory.getEnv().initClusterEnvironment();
-
-    connection = EnvFactory.getEnv().getConnection();
-    statement = connection.createStatement();
   }
 
   @After
   public void tearDown() throws Exception {
-    statement.close();
-    connection.close();
     EnvFactory.getEnv().cleanClusterEnvironment();
   }
 
@@ -163,18 +156,18 @@ public class IoTDBAutoCreateSchemaIT {
     String storageGroup = "root.sg2.a.b.c";
     String timeSeriesPrefix = "root.sg2.a.b";
 
-    statement.execute(String.format("CREATE DATABASE %s", storageGroup));
-    try {
-      statement.execute(
-          String.format("INSERT INTO %s(timestamp, c) values(123, \"aabb\")", timeSeriesPrefix));
-    } catch (SQLException ignored) {
-    }
-
-    // ensure that current database in cache is right.
-    InsertAutoCreate2Tool(storageGroup, timeSeriesPrefix);
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute(String.format("CREATE DATABASE %s", storageGroup));
+      try {
+        statement.execute(
+            String.format("INSERT INTO %s(timestamp, c) values(123, \"aabb\")", timeSeriesPrefix));
+      } catch (SQLException ignored) {
+      }
 
-    statement.close();
-    connection.close();
+      // ensure that current database in cache is right.
+      InsertAutoCreate2Tool(statement, storageGroup, timeSeriesPrefix);
+    }
     // todo restart test
     //    EnvironmentUtils.stopDaemon();
     //    setUp();
@@ -183,8 +176,8 @@ public class IoTDBAutoCreateSchemaIT {
     //    InsertAutoCreate2Tool(storageGroup, timeSeriesPrefix);
   }
 
-  private void InsertAutoCreate2Tool(String storageGroup, String timeSeriesPrefix)
-      throws SQLException {
+  private void InsertAutoCreate2Tool(
+      Statement statement, String storageGroup, String timeSeriesPrefix) throws SQLException {
     Set<String> resultList = new HashSet<>();
     try (ResultSet resultSet = statement.executeQuery("show timeseries")) {
       while (resultSet.next()) {
@@ -207,16 +200,19 @@ public class IoTDBAutoCreateSchemaIT {
    * insert data when database hasn't been set, timeseries hasn't been created and have null values
    */
   @Test
-  public void testInsertAutoCreate3() {
+  public void testInsertAutoCreate3() throws SQLException {
     String[] sqls = {
       "INSERT INTO root.sg0.d3(timestamp,s1) values(1,null)",
       "INSERT INTO root.sg0.d3(timestamp,s1,s2) values(1,null,2)",
     };
-    for (String sql : sqls) {
-      try {
-        statement.execute(sql);
-      } catch (SQLException e) {
-        Assert.assertTrue(e.getMessage().contains("Path [root.sg0.d3.s1] does not exist"));
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      for (String sql : sqls) {
+        try {
+          statement.execute(sql);
+        } catch (SQLException e) {
+          Assert.assertTrue(e.getMessage().contains("Path [root.sg0.d3.s1] does not exist"));
+        }
       }
     }
   }
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBCreateAlignedTimeseriesIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBCreateAlignedTimeseriesIT.java
index a3d10dd86f..79c5020383 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBCreateAlignedTimeseriesIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBCreateAlignedTimeseriesIT.java
@@ -44,21 +44,13 @@ import java.sql.Statement;
 @RunWith(IoTDBTestRunner.class)
 public class IoTDBCreateAlignedTimeseriesIT {
 
-  private Statement statement;
-  private Connection connection;
-
   @Before
   public void setUp() throws Exception {
     EnvFactory.getEnv().initClusterEnvironment();
-
-    connection = EnvFactory.getEnv().getConnection();
-    statement = connection.createStatement();
   }
 
   @After
   public void tearDown() throws Exception {
-    statement.close();
-    connection.close();
     EnvFactory.getEnv().cleanClusterEnvironment();
   }
 
@@ -70,19 +62,18 @@ public class IoTDBCreateAlignedTimeseriesIT {
           "root.sg1.d1.vector1.s1,FLOAT,PLAIN,UNCOMPRESSED",
           "root.sg1.d1.vector1.s2,INT64,RLE,SNAPPY"
         };
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute("CREATE DATABASE root.sg1");
+      try {
+        statement.execute(
+            "CREATE ALIGNED TIMESERIES root.sg1.d1.vector1(s1 FLOAT encoding=PLAIN compressor=UNCOMPRESSED,s2 INT64 encoding=RLE)");
+      } catch (SQLException ignored) {
+      }
 
-    statement.execute("CREATE DATABASE root.sg1");
-    try {
-      statement.execute(
-          "CREATE ALIGNED TIMESERIES root.sg1.d1.vector1(s1 FLOAT encoding=PLAIN compressor=UNCOMPRESSED,s2 INT64 encoding=RLE)");
-    } catch (SQLException ignored) {
+      // ensure that current database in cache is right.
+      assertTimeseriesEquals(timeSeriesArray);
     }
-
-    // ensure that current database in cache is right.
-    assertTimeseriesEquals(timeSeriesArray);
-
-    statement.close();
-    connection.close();
     // todo test restart
     //    EnvironmentUtils.stopDaemon();
     //    setUp();
@@ -98,16 +89,18 @@ public class IoTDBCreateAlignedTimeseriesIT {
         new String[] {
           "root.sg1.d1.vector1.s1,DOUBLE,PLAIN,SNAPPY", "root.sg1.d1.vector1.s2,INT64,RLE,SNAPPY"
         };
-
-    statement.execute("CREATE DATABASE root.sg1");
-    try {
-      statement.execute(
-          "CREATE ALIGNED TIMESERIES root.sg1.d1.vector1(s1 FLOAT encoding=PLAIN compressor=UNCOMPRESSED,s2 INT64 encoding=RLE)");
-      statement.execute("DELETE TIMESERIES root.sg1.d1.vector1.s1");
-      statement.execute(
-          "CREATE ALIGNED TIMESERIES root.sg1.d1.vector1(s1 DOUBLE encoding=PLAIN compressor=SNAPPY)");
-    } catch (SQLException e) {
-      e.printStackTrace();
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute("CREATE DATABASE root.sg1");
+      try {
+        statement.execute(
+            "CREATE ALIGNED TIMESERIES root.sg1.d1.vector1(s1 FLOAT encoding=PLAIN compressor=UNCOMPRESSED,s2 INT64 encoding=RLE)");
+        statement.execute("DELETE TIMESERIES root.sg1.d1.vector1.s1");
+        statement.execute(
+            "CREATE ALIGNED TIMESERIES root.sg1.d1.vector1(s1 DOUBLE encoding=PLAIN compressor=SNAPPY)");
+      } catch (SQLException e) {
+        e.printStackTrace();
+      }
     }
 
     // ensure that current database in cache is right.
@@ -124,7 +117,9 @@ public class IoTDBCreateAlignedTimeseriesIT {
   private void assertTimeseriesEquals(String[] timeSeriesArray) throws SQLException {
 
     int count = 0;
-    try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES")) {
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement();
+        ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES")) {
       while (resultSet.next()) {
         String ActualResult =
             resultSet.getString(ColumnHeaderConstant.TIMESERIES)
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBCreateStorageGroupIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBCreateStorageGroupIT.java
index 6284322413..c55a20ffe4 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBCreateStorageGroupIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBCreateStorageGroupIT.java
@@ -51,21 +51,14 @@ import static org.junit.Assert.fail;
 @RunWith(IoTDBTestRunner.class)
 @Category({LocalStandaloneIT.class, ClusterIT.class})
 public class IoTDBCreateStorageGroupIT {
-  private Statement statement;
-  private Connection connection;
 
   @Before
   public void setUp() throws Exception {
     EnvFactory.getEnv().initClusterEnvironment();
-
-    connection = EnvFactory.getEnv().getConnection();
-    statement = connection.createStatement();
   }
 
   @After
   public void tearDown() throws Exception {
-    statement.close();
-    connection.close();
     EnvFactory.getEnv().cleanClusterEnvironment();
   }
 
@@ -73,16 +66,15 @@ public class IoTDBCreateStorageGroupIT {
   @Test
   public void testCreateStorageGroup() throws Exception {
     String[] storageGroups = {"root.sg1", "root.sg2", "root.sg3"};
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      for (String storageGroup : storageGroups) {
+        statement.execute(String.format("create database %s", storageGroup));
+      }
 
-    for (String storageGroup : storageGroups) {
-      statement.execute(String.format("create database %s", storageGroup));
+      // ensure that current StorageGroup in cache is right.
+      createStorageGroupTool(statement, storageGroups);
     }
-
-    // ensure that current StorageGroup in cache is right.
-    createStorageGroupTool(storageGroups);
-
-    statement.close();
-    connection.close();
     // todo test restart
     //    EnvironmentUtils.stopDaemon();
     //    setUp();
@@ -91,7 +83,8 @@ public class IoTDBCreateStorageGroupIT {
     //    createStorageGroupTool(storageGroups);
   }
 
-  private void createStorageGroupTool(String[] storageGroups) throws SQLException {
+  private void createStorageGroupTool(Statement statement, String[] storageGroups)
+      throws SQLException {
 
     List<String> resultList = new ArrayList<>();
     try (ResultSet resultSet = statement.executeQuery("SHOW DATABASES")) {
@@ -114,16 +107,19 @@ public class IoTDBCreateStorageGroupIT {
   public void testCreateExistStorageGroup1() throws Exception {
     String storageGroup = "root.sg";
 
-    statement.execute(String.format("CREATE DATABASE %s", storageGroup));
-
-    try {
-      statement.execute(String.format("create database %s", storageGroup));
-      fail();
-    } catch (SQLException e) {
-      Assert.assertEquals(
-          TSStatusCode.DATABASE_ALREADY_EXISTS.getStatusCode()
-              + ": root.sg has already been created as database",
-          e.getMessage());
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute(String.format("CREATE DATABASE %s", storageGroup));
+
+      try {
+        statement.execute(String.format("create database %s", storageGroup));
+        fail();
+      } catch (SQLException e) {
+        Assert.assertEquals(
+            TSStatusCode.DATABASE_ALREADY_EXISTS.getStatusCode()
+                + ": root.sg has already been created as database",
+            e.getMessage());
+      }
     }
   }
 
@@ -131,16 +127,19 @@ public class IoTDBCreateStorageGroupIT {
   @Test
   public void testCreateExistStorageGroup2() throws Exception {
 
-    statement.execute("create database root.sg");
-
-    try {
-      statement.execute("create database root.sg.`device`");
-      fail();
-    } catch (SQLException e) {
-      Assert.assertEquals(
-          TSStatusCode.DATABASE_ALREADY_EXISTS.getStatusCode()
-              + ": root.sg has already been created as database",
-          e.getMessage());
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute("create database root.sg");
+
+      try {
+        statement.execute("create database root.sg.`device`");
+        fail();
+      } catch (SQLException e) {
+        Assert.assertEquals(
+            TSStatusCode.DATABASE_ALREADY_EXISTS.getStatusCode()
+                + ": root.sg has already been created as database",
+            e.getMessage());
+      }
     }
   }
 }
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeactivateTemplateIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeactivateTemplateIT.java
index 1e5821c264..8514d69b14 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeactivateTemplateIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeactivateTemplateIT.java
@@ -42,208 +42,226 @@ import java.sql.Statement;
 @Category({ClusterIT.class})
 public class IoTDBDeactivateTemplateIT {
 
-  private Statement statement;
-  private Connection connection;
-
   @Before
   public void setUp() throws Exception {
     EnvFactory.getEnv().initClusterEnvironment();
-    connection = EnvFactory.getEnv().getConnection();
-    statement = connection.createStatement();
 
     prepareTemplate();
   }
 
   @After
   public void tearDown() throws Exception {
-    statement.close();
-    connection.close();
     EnvFactory.getEnv().cleanClusterEnvironment();
   }
 
   private void prepareTemplate() throws SQLException {
     // create database
-    statement.execute("CREATE DATABASE root.sg1");
-    statement.execute("CREATE DATABASE root.sg2");
-    statement.execute("CREATE DATABASE root.sg3");
-    statement.execute("CREATE DATABASE root.sg4");
-
-    // create schema template
-    statement.execute("CREATE SCHEMA TEMPLATE t1 (s1 INT64, s2 DOUBLE)");
-    statement.execute("CREATE SCHEMA TEMPLATE t2 (s1 INT64, s2 DOUBLE)");
-
-    // set schema template
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1");
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg2");
-    statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg3");
-    statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg4");
-
-    String insertSql = "insert into root.sg%d.d1(time, s1, s2) values(%d, %d, %d)";
-    for (int i = 1; i <= 4; i++) {
-      for (int j = 1; j <= 4; j++) {
-        statement.execute(String.format(insertSql, j, i, i, i));
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+
+      statement.execute("CREATE DATABASE root.sg1");
+      statement.execute("CREATE DATABASE root.sg2");
+      statement.execute("CREATE DATABASE root.sg3");
+      statement.execute("CREATE DATABASE root.sg4");
+
+      // create schema template
+      statement.execute("CREATE SCHEMA TEMPLATE t1 (s1 INT64, s2 DOUBLE)");
+      statement.execute("CREATE SCHEMA TEMPLATE t2 (s1 INT64, s2 DOUBLE)");
+
+      // set schema template
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1");
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg2");
+      statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg3");
+      statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg4");
+
+      String insertSql = "insert into root.sg%d.d1(time, s1, s2) values(%d, %d, %d)";
+      for (int i = 1; i <= 4; i++) {
+        for (int j = 1; j <= 4; j++) {
+          statement.execute(String.format(insertSql, j, i, i, i));
+        }
       }
     }
   }
 
   @Test
   public void deactivateTemplateAndReactivateTest() throws Exception {
-    statement.execute("DEACTIVATE SCHEMA TEMPLATE t1 FROM root.sg1.d1");
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.*")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      Assert.assertEquals(1, resultSetMetaData.getColumnCount());
-      Assert.assertFalse(resultSet.next());
-    }
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute("DEACTIVATE SCHEMA TEMPLATE t1 FROM root.sg1.d1");
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.*")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Assert.assertEquals(1, resultSetMetaData.getColumnCount());
+        Assert.assertFalse(resultSet.next());
+      }
 
-    statement.execute("CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.sg1.d1");
+      statement.execute("CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.sg1.d1");
 
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.*")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      Assert.assertEquals(3, resultSetMetaData.getColumnCount());
-      Assert.assertFalse(resultSet.next());
-    }
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.*")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Assert.assertEquals(3, resultSetMetaData.getColumnCount());
+        Assert.assertFalse(resultSet.next());
+      }
 
-    statement.execute("insert into root.sg1.d1(time, s1, s2) values(1, 1, 1)");
-
-    String[] retArray = new String[] {"1,1,1.0,"};
-    int cnt = 0;
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.*")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      Assert.assertEquals(3, resultSetMetaData.getColumnCount());
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+      statement.execute("insert into root.sg1.d1(time, s1, s2) values(1, 1, 1)");
+
+      String[] retArray = new String[] {"1,1,1.0,"};
+      int cnt = 0;
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.*")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Assert.assertEquals(3, resultSetMetaData.getColumnCount());
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
+        Assert.assertEquals(1, cnt);
       }
-      Assert.assertEquals(1, cnt);
     }
   }
 
   @Test
   public void deactivateTemplateAndAutoDeleteDeviceTest() throws Exception {
-    statement.execute("DEACTIVATE SCHEMA TEMPLATE t1 FROM root.sg1.d1");
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.*")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      Assert.assertEquals(1, resultSetMetaData.getColumnCount());
-      Assert.assertFalse(resultSet.next());
-    }
-    try (ResultSet resultSet = statement.executeQuery("SHOW DEVICES root.sg1.*")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      Assert.assertFalse(resultSet.next());
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute("DEACTIVATE SCHEMA TEMPLATE t1 FROM root.sg1.d1");
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.*")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Assert.assertEquals(1, resultSetMetaData.getColumnCount());
+        Assert.assertFalse(resultSet.next());
+      }
+      try (ResultSet resultSet = statement.executeQuery("SHOW DEVICES root.sg1.*")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Assert.assertFalse(resultSet.next());
+      }
     }
   }
 
   @Test
   public void deactivateTemplateCrossSchemaRegionTest() throws Exception {
     String insertSql = "insert into root.sg1.d%d(time, s1, s2) values(%d, %d, %d)";
-    for (int i = 1; i <= 4; i++) {
-      for (int j = 1; j <= 4; j++) {
-        statement.execute(String.format(insertSql, j, i, i, i));
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      for (int i = 1; i <= 4; i++) {
+        for (int j = 1; j <= 4; j++) {
+          statement.execute(String.format(insertSql, j, i, i, i));
+        }
       }
-    }
 
-    statement.execute("DEACTIVATE SCHEMA TEMPLATE FROM root.sg1.*");
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.**")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      Assert.assertEquals(1, resultSetMetaData.getColumnCount());
-      Assert.assertFalse(resultSet.next());
+      statement.execute("DEACTIVATE SCHEMA TEMPLATE FROM root.sg1.*");
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.**")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Assert.assertEquals(1, resultSetMetaData.getColumnCount());
+        Assert.assertFalse(resultSet.next());
+      }
     }
   }
 
   @Test
   public void deactivateTemplateCrossStorageGroupTest() throws Exception {
     String insertSql = "insert into root.sg%d.d2(time, s1, s2) values(%d, %d, %d)";
-    for (int i = 1; i <= 4; i++) {
-      for (int j = 1; j <= 2; j++) {
-        statement.execute(String.format(insertSql, j, i, i, i));
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      for (int i = 1; i <= 4; i++) {
+        for (int j = 1; j <= 2; j++) {
+          statement.execute(String.format(insertSql, j, i, i, i));
+        }
       }
-    }
 
-    statement.execute("DEACTIVATE SCHEMA TEMPLATE FROM root.*.d1");
-    String[] retArray =
-        new String[] {"1,1,1.0,1,1.0,", "2,2,2.0,2,2.0,", "3,3,3.0,3,3.0,", "4,4,4.0,4,4.0,"};
-    int cnt = 0;
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.**")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      Assert.assertEquals(5, resultSetMetaData.getColumnCount());
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+      statement.execute("DEACTIVATE SCHEMA TEMPLATE FROM root.*.d1");
+      String[] retArray =
+          new String[] {"1,1,1.0,1,1.0,", "2,2,2.0,2,2.0,", "3,3,3.0,3,3.0,", "4,4,4.0,4,4.0,"};
+      int cnt = 0;
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.**")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Assert.assertEquals(5, resultSetMetaData.getColumnCount());
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
+        Assert.assertEquals(retArray.length, cnt);
       }
-      Assert.assertEquals(retArray.length, cnt);
-    }
 
-    statement.execute("DEACTIVATE SCHEMA TEMPLATE FROM root.**, root.sg1.*");
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.**")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      Assert.assertEquals(1, resultSetMetaData.getColumnCount());
-      Assert.assertFalse(resultSet.next());
+      statement.execute("DEACTIVATE SCHEMA TEMPLATE FROM root.**, root.sg1.*");
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.**")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Assert.assertEquals(1, resultSetMetaData.getColumnCount());
+        Assert.assertFalse(resultSet.next());
+      }
     }
   }
 
   @Test
   public void deactivateTemplateWithMultiPatternTest() throws Exception {
-    statement.execute("DEACTIVATE SCHEMA TEMPLATE t1 FROM root.sg1.d1, root.sg2.*");
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.*, root.sg2.*")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      Assert.assertEquals(1, resultSetMetaData.getColumnCount());
-      Assert.assertFalse(resultSet.next());
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute("DEACTIVATE SCHEMA TEMPLATE t1 FROM root.sg1.d1, root.sg2.*");
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.*, root.sg2.*")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Assert.assertEquals(1, resultSetMetaData.getColumnCount());
+        Assert.assertFalse(resultSet.next());
+      }
     }
   }
 
   @Test
   public void deactivateNoneUsageTemplateTest() throws Exception {
-    try {
-      statement.execute("DEACTIVATE SCHEMA TEMPLATE t1 FROM root.sg5.d1");
-      Assert.fail();
-    } catch (SQLException e) {
-      Assert.assertEquals(
-          TSStatusCode.TEMPLATE_NOT_SET.getStatusCode()
-              + ": Schema Template t1 is not set on any prefix path of [root.sg5.d1]",
-          e.getMessage());
-    }
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      try {
+        statement.execute("DEACTIVATE SCHEMA TEMPLATE t1 FROM root.sg5.d1");
+        Assert.fail();
+      } catch (SQLException e) {
+        Assert.assertEquals(
+            TSStatusCode.TEMPLATE_NOT_SET.getStatusCode()
+                + ": Schema Template t1 is not set on any prefix path of [root.sg5.d1]",
+            e.getMessage());
+      }
 
-    statement.execute("CREATE DATABASE root.sg5");
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg5 ");
-    try {
-      statement.execute("DEACTIVATE SCHEMA TEMPLATE t1 FROM root.sg5.d1");
-      Assert.fail();
-    } catch (SQLException e) {
-      Assert.assertEquals(
-          TSStatusCode.TEMPLATE_NOT_ACTIVATED.getStatusCode()
-              + ": Target schema Template is not activated on any path matched by given path pattern",
-          e.getMessage());
+      statement.execute("CREATE DATABASE root.sg5");
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg5 ");
+      try {
+        statement.execute("DEACTIVATE SCHEMA TEMPLATE t1 FROM root.sg5.d1");
+        Assert.fail();
+      } catch (SQLException e) {
+        Assert.assertEquals(
+            TSStatusCode.TEMPLATE_NOT_ACTIVATED.getStatusCode()
+                + ": Target schema Template is not activated on any path matched by given path pattern",
+            e.getMessage());
+      }
     }
   }
 
   @Test
   public void multiSyntaxTest() throws Exception {
-    statement.execute("DELETE TIMESERIES OF SCHEMA TEMPLATE t1 FROM root.sg1.d1");
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.*")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      Assert.assertEquals(1, resultSetMetaData.getColumnCount());
-      Assert.assertFalse(resultSet.next());
-    }
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute("DELETE TIMESERIES OF SCHEMA TEMPLATE t1 FROM root.sg1.d1");
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg1.*")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Assert.assertEquals(1, resultSetMetaData.getColumnCount());
+        Assert.assertFalse(resultSet.next());
+      }
 
-    statement.execute("DEACTIVATE SCHEMA TEMPLATE t2 FROM root.sg3.d1");
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg3.*")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      Assert.assertEquals(1, resultSetMetaData.getColumnCount());
-      Assert.assertFalse(resultSet.next());
-    }
+      statement.execute("DEACTIVATE SCHEMA TEMPLATE t2 FROM root.sg3.d1");
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg3.*")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Assert.assertEquals(1, resultSetMetaData.getColumnCount());
+        Assert.assertFalse(resultSet.next());
+      }
 
-    statement.execute("DEACTIVATE SCHEMA TEMPLATE FROM root.**");
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.**")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      Assert.assertEquals(1, resultSetMetaData.getColumnCount());
-      Assert.assertFalse(resultSet.next());
+      statement.execute("DEACTIVATE SCHEMA TEMPLATE FROM root.**");
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.**")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Assert.assertEquals(1, resultSetMetaData.getColumnCount());
+        Assert.assertFalse(resultSet.next());
+      }
     }
   }
 }
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteAlignedTimeseriesIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteAlignedTimeseriesIT.java
index c32a20b286..1d07d37357 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteAlignedTimeseriesIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteAlignedTimeseriesIT.java
@@ -46,22 +46,14 @@ import static org.junit.Assert.fail;
 @Category({ClusterIT.class})
 public class IoTDBDeleteAlignedTimeseriesIT {
 
-  private Statement statement;
-  private Connection connection;
-
   @Before
   public void setUp() throws ClassNotFoundException, SQLException, InterruptedException {
     EnvFactory.getEnv().getConfig().getCommonConfig().setMemtableSizeThreshold(2);
     EnvFactory.getEnv().initClusterEnvironment();
-
-    connection = EnvFactory.getEnv().getConnection();
-    statement = connection.createStatement();
   }
 
   @After
   public void tearDown() throws Exception {
-    statement.close();
-    connection.close();
     EnvFactory.getEnv().cleanClusterEnvironment();
   }
 
@@ -69,36 +61,38 @@ public class IoTDBDeleteAlignedTimeseriesIT {
   public void deleteTimeseriesAndCreateDifferentTypeTest() throws Exception {
     String[] retArray = new String[] {"1,1,", "2,1.1,"};
     int cnt = 0;
-
-    statement.execute(
-        "create aligned timeseries root.turbine1.d1(s1 INT64 encoding=PLAIN compression=SNAPPY, "
-            + "s2 INT64 encoding=PLAIN compression=SNAPPY)");
-    statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1,s2) ALIGNED VALUES(1,1,2)");
-    try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute(
+          "create aligned timeseries root.turbine1.d1(s1 INT64 encoding=PLAIN compression=SNAPPY, "
+              + "s2 INT64 encoding=PLAIN compression=SNAPPY)");
+      statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1,s2) ALIGNED VALUES(1,1,2)");
+      try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
       }
-    }
 
-    statement.execute("DELETE timeseries root.turbine1.d1.s1");
-    statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1) ALIGNED VALUES(2,1.1)");
-    statement.execute("FLUSH");
+      statement.execute("DELETE timeseries root.turbine1.d1.s1");
+      statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1) ALIGNED VALUES(2,1.1)");
+      statement.execute("FLUSH");
 
-    try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+      try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
       }
     }
 
@@ -113,36 +107,38 @@ public class IoTDBDeleteAlignedTimeseriesIT {
   public void deleteTimeseriesAndCreateSameTypeTest() throws Exception {
     String[] retArray = new String[] {"1,1.0,", "2,5.0,"};
     int cnt = 0;
-
-    statement.execute(
-        "create aligned timeseries root.turbine1.d1(s1 FLOAT encoding=PLAIN compression=SNAPPY, "
-            + "s2 INT64 encoding=PLAIN compression=SNAPPY)");
-    statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1,s2) ALIGNED VALUES(1,1,2)");
-
-    try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute(
+          "create aligned timeseries root.turbine1.d1(s1 FLOAT encoding=PLAIN compression=SNAPPY, "
+              + "s2 INT64 encoding=PLAIN compression=SNAPPY)");
+      statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1,s2) ALIGNED VALUES(1,1,2)");
+
+      try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
       }
-    }
-    statement.execute("DELETE timeseries root.turbine1.d1.s1");
-    statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1) ALIGNED VALUES(2,5)");
-    statement.execute("FLUSH");
-
-    try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+      statement.execute("DELETE timeseries root.turbine1.d1.s1");
+      statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1) ALIGNED VALUES(2,5)");
+      statement.execute("FLUSH");
+
+      try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
       }
     }
 
@@ -157,53 +153,55 @@ public class IoTDBDeleteAlignedTimeseriesIT {
   public void deleteTimeseriesAndChangeDeviceAlignmentTest() throws Exception {
     String[] retArray = new String[] {"1,1.0,2.0,"};
     int cnt = 0;
-
-    statement.execute("INSERT INTO root.sg3.d1(timestamp,s1,s2) ALIGNED VALUES(1,1,2)");
-    try (ResultSet resultSet = statement.executeQuery("SHOW DEVICES")) {
-      while (resultSet.next()) {
-        Assert.assertEquals("true", resultSet.getString(ColumnHeaderConstant.IS_ALIGNED));
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute("INSERT INTO root.sg3.d1(timestamp,s1,s2) ALIGNED VALUES(1,1,2)");
+      try (ResultSet resultSet = statement.executeQuery("SHOW DEVICES")) {
+        while (resultSet.next()) {
+          Assert.assertEquals("true", resultSet.getString(ColumnHeaderConstant.IS_ALIGNED));
+        }
       }
-    }
-    cnt = 0;
-    statement.execute("DELETE timeseries root.sg3.d1.s1");
-    statement.execute("DELETE timeseries root.sg3.d1.s2");
-    statement.execute("INSERT INTO root.sg3.d1(timestamp,s1,s2) VALUES(1,1,2)");
-    try (ResultSet resultSet = statement.executeQuery("SHOW DEVICES")) {
-      while (resultSet.next()) {
-        Assert.assertEquals("false", resultSet.getString(ColumnHeaderConstant.IS_ALIGNED));
+      cnt = 0;
+      statement.execute("DELETE timeseries root.sg3.d1.s1");
+      statement.execute("DELETE timeseries root.sg3.d1.s2");
+      statement.execute("INSERT INTO root.sg3.d1(timestamp,s1,s2) VALUES(1,1,2)");
+      try (ResultSet resultSet = statement.executeQuery("SHOW DEVICES")) {
+        while (resultSet.next()) {
+          Assert.assertEquals("false", resultSet.getString(ColumnHeaderConstant.IS_ALIGNED));
+        }
       }
-    }
 
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg3.d1")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg3.d1")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
       }
-    }
-    cnt = 0;
-    statement.execute("DELETE timeseries root.sg3.d1.s1");
-    statement.execute("DELETE timeseries root.sg3.d1.s2");
-    statement.execute("INSERT INTO root.sg3.d1(timestamp,s1,s2) ALIGNED VALUES(1,1,2)");
-    try (ResultSet resultSet = statement.executeQuery("SHOW DEVICES")) {
-      while (resultSet.next()) {
-        Assert.assertEquals("true", resultSet.getString(ColumnHeaderConstant.IS_ALIGNED));
+      cnt = 0;
+      statement.execute("DELETE timeseries root.sg3.d1.s1");
+      statement.execute("DELETE timeseries root.sg3.d1.s2");
+      statement.execute("INSERT INTO root.sg3.d1(timestamp,s1,s2) ALIGNED VALUES(1,1,2)");
+      try (ResultSet resultSet = statement.executeQuery("SHOW DEVICES")) {
+        while (resultSet.next()) {
+          Assert.assertEquals("true", resultSet.getString(ColumnHeaderConstant.IS_ALIGNED));
+        }
       }
-    }
 
-    try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg3.d1")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+      try (ResultSet resultSet = statement.executeQuery("SELECT * FROM root.sg3.d1")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
       }
     }
   }
@@ -212,7 +210,8 @@ public class IoTDBDeleteAlignedTimeseriesIT {
   public void deleteTimeSeriesMultiIntervalTest() {
     String[] retArray1 = new String[] {"0,0"};
 
-    try {
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
       String insertSql = "insert into root.sg.d1(time, s1) aligned values(%d, %d)";
       for (int i = 1; i <= 4; i++) {
         statement.execute(String.format(insertSql, i, i));
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteTimeseriesIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteTimeseriesIT.java
index f880ec9009..08fa2f672f 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteTimeseriesIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteTimeseriesIT.java
@@ -43,9 +43,6 @@ import static org.junit.Assert.fail;
 @Category({LocalStandaloneIT.class, ClusterIT.class})
 public class IoTDBDeleteTimeseriesIT extends AbstractSchemaIT {
 
-  private Statement statement;
-  private Connection connection;
-
   public IoTDBDeleteTimeseriesIT(SchemaTestMode schemaTestMode) {
     super(schemaTestMode);
   }
@@ -54,17 +51,11 @@ public class IoTDBDeleteTimeseriesIT extends AbstractSchemaIT {
   public void setUp() throws Exception {
     super.setUp();
     EnvFactory.getEnv().getConfig().getCommonConfig().setMemtableSizeThreshold(2);
-
     EnvFactory.getEnv().initClusterEnvironment();
-
-    connection = EnvFactory.getEnv().getConnection();
-    statement = connection.createStatement();
   }
 
   @After
   public void tearDown() throws Exception {
-    statement.close();
-    connection.close();
     EnvFactory.getEnv().cleanClusterEnvironment();
     super.tearDown();
   }
@@ -73,39 +64,41 @@ public class IoTDBDeleteTimeseriesIT extends AbstractSchemaIT {
   public void deleteTimeseriesAndCreateDifferentTypeTest() throws Exception {
     String[] retArray = new String[] {"1,1,", "2,1.1,"};
     int cnt = 0;
-
-    statement.execute(
-        "create timeseries root.turbine1.d1.s1 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
-    statement.execute(
-        "create timeseries root.turbine1.d1.s2 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
-    statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1,s2) VALUES(1,1,2)");
-
-    try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute(
+          "create timeseries root.turbine1.d1.s1 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
+      statement.execute(
+          "create timeseries root.turbine1.d1.s2 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
+      statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1,s2) VALUES(1,1,2)");
+
+      try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
       }
-    }
-    statement.execute("DELETE timeseries root.turbine1.d1.s1");
-    statement.execute(
-        "create timeseries root.turbine1.d1.s1 with datatype=DOUBLE, encoding=PLAIN, compression=SNAPPY");
-    statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1) VALUES(2,1.1)");
-    statement.execute("FLUSH");
-
-    try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+      statement.execute("DELETE timeseries root.turbine1.d1.s1");
+      statement.execute(
+          "create timeseries root.turbine1.d1.s1 with datatype=DOUBLE, encoding=PLAIN, compression=SNAPPY");
+      statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1) VALUES(2,1.1)");
+      statement.execute("FLUSH");
+
+      try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
       }
     }
 
@@ -116,45 +109,48 @@ public class IoTDBDeleteTimeseriesIT extends AbstractSchemaIT {
     //      boolean hasResult = statement.execute("SELECT * FROM root.**");
     //      Assert.assertTrue(hasResult);
     //    }
+
   }
 
   @Test
   public void deleteTimeseriesAndCreateSameTypeTest() throws Exception {
     String[] retArray = new String[] {"1,1,", "2,5,"};
     int cnt = 0;
-
-    statement.execute(
-        "create timeseries root.turbine1.d1.s1 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
-    statement.execute(
-        "create timeseries root.turbine1.d1.s2 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
-    statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1,s2) VALUES(1,1,2)");
-
-    try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute(
+          "create timeseries root.turbine1.d1.s1 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
+      statement.execute(
+          "create timeseries root.turbine1.d1.s2 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
+      statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1,s2) VALUES(1,1,2)");
+
+      try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
       }
-    }
-    statement.execute("DELETE timeseries root.turbine1.d1.s1");
-    statement.execute(
-        "create timeseries root.turbine1.d1.s1 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
-    statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1) VALUES(2,5)");
-    statement.execute("FLUSH");
-
-    try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+      statement.execute("DELETE timeseries root.turbine1.d1.s1");
+      statement.execute(
+          "create timeseries root.turbine1.d1.s1 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
+      statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1) VALUES(2,5)");
+      statement.execute("FLUSH");
+
+      try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
       }
     }
 
@@ -171,7 +167,8 @@ public class IoTDBDeleteTimeseriesIT extends AbstractSchemaIT {
   public void deleteTimeSeriesMultiIntervalTest() {
     String[] retArray1 = new String[] {"0,0"};
 
-    try {
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
       String insertSql = "insert into root.sg.d1(time, s1) values(%d, %d)";
       for (int i = 1; i <= 4; i++) {
         statement.execute(String.format(insertSql, i, i));
@@ -206,36 +203,39 @@ public class IoTDBDeleteTimeseriesIT extends AbstractSchemaIT {
     String[] retArray1 = new String[] {"0,4,4,4,4"};
 
     String insertSql = "insert into root.sg.d1(time, s1, s2, s3, s4) values(%d, %d, %d, %d, %d)";
-    for (int i = 1; i <= 4; i++) {
-      statement.execute(String.format(insertSql, i, i, i, i, i));
-    }
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      for (int i = 1; i <= 4; i++) {
+        statement.execute(String.format(insertSql, i, i, i, i, i));
+      }
 
-    int cnt = 0;
-    try (ResultSet resultSet =
-        statement.executeQuery(
-            "select count(s1), count(s2), count(s3), count(s4) from root.sg.d1")) {
-      while (resultSet.next()) {
-        StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
-        for (int i = 1; i <= 4; i++) {
-          ans.append(",").append(resultSet.getString(count("root.sg.d1.s" + i)));
+      int cnt = 0;
+      try (ResultSet resultSet =
+          statement.executeQuery(
+              "select count(s1), count(s2), count(s3), count(s4) from root.sg.d1")) {
+        while (resultSet.next()) {
+          StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
+          for (int i = 1; i <= 4; i++) {
+            ans.append(",").append(resultSet.getString(count("root.sg.d1.s" + i)));
+          }
+          Assert.assertEquals(retArray1[cnt], ans.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray1[cnt], ans.toString());
-        cnt++;
+        Assert.assertEquals(retArray1.length, cnt);
       }
-      Assert.assertEquals(retArray1.length, cnt);
-    }
 
-    statement.execute("delete timeseries root.sg.d1.*");
-    try (ResultSet resultSet = statement.executeQuery("select * from root.sg.d1")) {
-      Assert.assertFalse(resultSet.next());
-    }
+      statement.execute("delete timeseries root.sg.d1.*");
+      try (ResultSet resultSet = statement.executeQuery("select * from root.sg.d1")) {
+        Assert.assertFalse(resultSet.next());
+      }
 
-    try (ResultSet resultSet = statement.executeQuery("show timeseries root.sg.d1.*")) {
-      Assert.assertFalse(resultSet.next());
-    }
+      try (ResultSet resultSet = statement.executeQuery("show timeseries root.sg.d1.*")) {
+        Assert.assertFalse(resultSet.next());
+      }
 
-    try (ResultSet resultSet = statement.executeQuery("show devices root.sg.d1")) {
-      Assert.assertFalse(resultSet.next());
+      try (ResultSet resultSet = statement.executeQuery("show devices root.sg.d1")) {
+        Assert.assertFalse(resultSet.next());
+      }
     }
   }
 
@@ -244,45 +244,48 @@ public class IoTDBDeleteTimeseriesIT extends AbstractSchemaIT {
     String[] retArray1 = new String[] {"0,4,4,4,4"};
 
     String insertSql = "insert into root.sg.d%d(time, s1, s2) values(%d, %d, %d)";
-    for (int i = 1; i <= 4; i++) {
-      for (int j = 1; j <= 4; j++) {
-        statement.execute(String.format(insertSql, j, i, i, i));
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      for (int i = 1; i <= 4; i++) {
+        for (int j = 1; j <= 4; j++) {
+          statement.execute(String.format(insertSql, j, i, i, i));
+        }
       }
-    }
 
-    int cnt = 0;
-    try (ResultSet resultSet = statement.executeQuery("select count(s1) from root.sg.*")) {
-      while (resultSet.next()) {
-        StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
-        for (int i = 1; i <= 4; i++) {
-          ans.append(",").append(resultSet.getString(count("root.sg.d" + i + ".s1")));
+      int cnt = 0;
+      try (ResultSet resultSet = statement.executeQuery("select count(s1) from root.sg.*")) {
+        while (resultSet.next()) {
+          StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
+          for (int i = 1; i <= 4; i++) {
+            ans.append(",").append(resultSet.getString(count("root.sg.d" + i + ".s1")));
+          }
+          Assert.assertEquals(retArray1[cnt], ans.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray1[cnt], ans.toString());
-        cnt++;
+        Assert.assertEquals(retArray1.length, cnt);
       }
-      Assert.assertEquals(retArray1.length, cnt);
-    }
 
-    statement.execute("delete timeseries root.sg.*.s1");
-    try (ResultSet resultSet = statement.executeQuery("select s1 from root.sg.*")) {
-      Assert.assertFalse(resultSet.next());
-    }
+      statement.execute("delete timeseries root.sg.*.s1");
+      try (ResultSet resultSet = statement.executeQuery("select s1 from root.sg.*")) {
+        Assert.assertFalse(resultSet.next());
+      }
 
-    try (ResultSet resultSet = statement.executeQuery("show timeseries root.sg.*.s1")) {
-      Assert.assertFalse(resultSet.next());
-    }
+      try (ResultSet resultSet = statement.executeQuery("show timeseries root.sg.*.s1")) {
+        Assert.assertFalse(resultSet.next());
+      }
 
-    cnt = 0;
-    try (ResultSet resultSet = statement.executeQuery("select count(s2) from root.sg.*")) {
-      while (resultSet.next()) {
-        StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
-        for (int i = 1; i <= 4; i++) {
-          ans.append(",").append(resultSet.getString(count("root.sg.d" + i + ".s2")));
+      cnt = 0;
+      try (ResultSet resultSet = statement.executeQuery("select count(s2) from root.sg.*")) {
+        while (resultSet.next()) {
+          StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
+          for (int i = 1; i <= 4; i++) {
+            ans.append(",").append(resultSet.getString(count("root.sg.d" + i + ".s2")));
+          }
+          Assert.assertEquals(retArray1[cnt], ans.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray1[cnt], ans.toString());
-        cnt++;
+        Assert.assertEquals(retArray1.length, cnt);
       }
-      Assert.assertEquals(retArray1.length, cnt);
     }
   }
 
@@ -291,68 +294,71 @@ public class IoTDBDeleteTimeseriesIT extends AbstractSchemaIT {
     String[] retArray1 = new String[] {"0,4,4,4,4"};
 
     String insertSql = "insert into root.sg%d.d1(time, s1, s2) values(%d, %d, %d)";
-    for (int i = 1; i <= 4; i++) {
-      for (int j = 1; j <= 4; j++) {
-        statement.execute(String.format(insertSql, j, i, i, i));
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      for (int i = 1; i <= 4; i++) {
+        for (int j = 1; j <= 4; j++) {
+          statement.execute(String.format(insertSql, j, i, i, i));
+        }
       }
-    }
 
-    int cnt = 0;
-    try (ResultSet resultSet = statement.executeQuery("select count(s1) from root.*.d1")) {
-      while (resultSet.next()) {
-        StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
-        for (int i = 1; i <= 4; i++) {
-          ans.append(",").append(resultSet.getString(count("root.sg" + i + ".d1.s1")));
+      int cnt = 0;
+      try (ResultSet resultSet = statement.executeQuery("select count(s1) from root.*.d1")) {
+        while (resultSet.next()) {
+          StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
+          for (int i = 1; i <= 4; i++) {
+            ans.append(",").append(resultSet.getString(count("root.sg" + i + ".d1.s1")));
+          }
+          Assert.assertEquals(retArray1[cnt], ans.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray1[cnt], ans.toString());
-        cnt++;
+        Assert.assertEquals(retArray1.length, cnt);
       }
-      Assert.assertEquals(retArray1.length, cnt);
-    }
 
-    statement.execute("delete timeseries root.*.d1.s1");
-    try (ResultSet resultSet = statement.executeQuery("select s1 from root.*.*")) {
-      Assert.assertFalse(resultSet.next());
-    }
+      statement.execute("delete timeseries root.*.d1.s1");
+      try (ResultSet resultSet = statement.executeQuery("select s1 from root.*.*")) {
+        Assert.assertFalse(resultSet.next());
+      }
 
-    try (ResultSet resultSet = statement.executeQuery("show timeseries root.*.*.s1")) {
-      Assert.assertFalse(resultSet.next());
-    }
+      try (ResultSet resultSet = statement.executeQuery("show timeseries root.*.*.s1")) {
+        Assert.assertFalse(resultSet.next());
+      }
 
-    cnt = 0;
-    try (ResultSet resultSet = statement.executeQuery("select count(s2) from root.*.*")) {
-      while (resultSet.next()) {
-        StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
-        for (int i = 1; i <= 4; i++) {
-          ans.append(",").append(resultSet.getString(count("root.sg" + i + ".d1.s2")));
+      cnt = 0;
+      try (ResultSet resultSet = statement.executeQuery("select count(s2) from root.*.*")) {
+        while (resultSet.next()) {
+          StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
+          for (int i = 1; i <= 4; i++) {
+            ans.append(",").append(resultSet.getString(count("root.sg" + i + ".d1.s2")));
+          }
+          Assert.assertEquals(retArray1[cnt], ans.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray1[cnt], ans.toString());
-        cnt++;
+        Assert.assertEquals(retArray1.length, cnt);
       }
-      Assert.assertEquals(retArray1.length, cnt);
-    }
 
-    statement.execute("delete timeseries root.sg1.d1.s2, root.sg2.**");
-    try (ResultSet resultSet = statement.executeQuery("select s2 from root.sg1.*")) {
-      Assert.assertFalse(resultSet.next());
-    }
+      statement.execute("delete timeseries root.sg1.d1.s2, root.sg2.**");
+      try (ResultSet resultSet = statement.executeQuery("select s2 from root.sg1.*")) {
+        Assert.assertFalse(resultSet.next());
+      }
 
-    try (ResultSet resultSet = statement.executeQuery("show timeseries root.sg2.*.s2")) {
-      Assert.assertFalse(resultSet.next());
-    }
+      try (ResultSet resultSet = statement.executeQuery("show timeseries root.sg2.*.s2")) {
+        Assert.assertFalse(resultSet.next());
+      }
 
-    retArray1 = new String[] {"0,4,4"};
-    cnt = 0;
-    try (ResultSet resultSet = statement.executeQuery("select count(s2) from root.*.*")) {
-      while (resultSet.next()) {
-        StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
-        for (int i = 3; i <= 4; i++) {
-          ans.append(",").append(resultSet.getString(count("root.sg" + i + ".d1.s2")));
+      retArray1 = new String[] {"0,4,4"};
+      cnt = 0;
+      try (ResultSet resultSet = statement.executeQuery("select count(s2) from root.*.*")) {
+        while (resultSet.next()) {
+          StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
+          for (int i = 3; i <= 4; i++) {
+            ans.append(",").append(resultSet.getString(count("root.sg" + i + ".d1.s2")));
+          }
+          Assert.assertEquals(retArray1[cnt], ans.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray1[cnt], ans.toString());
-        cnt++;
+        Assert.assertEquals(retArray1.length, cnt);
       }
-      Assert.assertEquals(retArray1.length, cnt);
     }
   }
 
@@ -361,77 +367,83 @@ public class IoTDBDeleteTimeseriesIT extends AbstractSchemaIT {
     String[] retArray1 = new String[] {"0,4,4,4,4"};
 
     String insertSql = "insert into root.sg%d.d1(time, s1, s2) values(%d, %d, %d)";
-    for (int i = 1; i <= 4; i++) {
-      for (int j = 1; j <= 4; j++) {
-        statement.execute(String.format(insertSql, j, i, i, i));
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      for (int i = 1; i <= 4; i++) {
+        for (int j = 1; j <= 4; j++) {
+          statement.execute(String.format(insertSql, j, i, i, i));
+        }
       }
-    }
 
-    int cnt = 0;
-    try (ResultSet resultSet = statement.executeQuery("select count(s1) from root.*.d1")) {
-      while (resultSet.next()) {
-        StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
-        for (int i = 1; i <= 4; i++) {
-          ans.append(",").append(resultSet.getString(count("root.sg" + i + ".d1.s1")));
+      int cnt = 0;
+      try (ResultSet resultSet = statement.executeQuery("select count(s1) from root.*.d1")) {
+        while (resultSet.next()) {
+          StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
+          for (int i = 1; i <= 4; i++) {
+            ans.append(",").append(resultSet.getString(count("root.sg" + i + ".d1.s1")));
+          }
+          Assert.assertEquals(retArray1[cnt], ans.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray1[cnt], ans.toString());
-        cnt++;
+        Assert.assertEquals(retArray1.length, cnt);
       }
-      Assert.assertEquals(retArray1.length, cnt);
-    }
 
-    statement.execute("delete timeseries root.*.d1.s1, root.*.d1.s2");
-    try (ResultSet resultSet = statement.executeQuery("select * from root.*.*")) {
-      Assert.assertFalse(resultSet.next());
-    }
+      statement.execute("delete timeseries root.*.d1.s1, root.*.d1.s2");
+      try (ResultSet resultSet = statement.executeQuery("select * from root.*.*")) {
+        Assert.assertFalse(resultSet.next());
+      }
 
-    try (ResultSet resultSet = statement.executeQuery("show timeseries root.*.*.*")) {
-      Assert.assertFalse(resultSet.next());
+      try (ResultSet resultSet = statement.executeQuery("show timeseries root.*.*.*")) {
+        Assert.assertFalse(resultSet.next());
+      }
     }
   }
 
   @Test
   public void deleteTimeSeriesAndReturnPathNotExistsTest() throws Exception {
-    try {
-      statement.execute("delete timeseries root.**");
-    } catch (SQLException e) {
-      Assert.assertTrue(
-          e.getMessage()
-              .contains(
-                  TSStatusCode.PATH_NOT_EXIST.getStatusCode()
-                      + ": Timeseries [root.**] does not exist or is represented by schema template"));
-    }
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      try {
+        statement.execute("delete timeseries root.**");
+      } catch (SQLException e) {
+        Assert.assertTrue(
+            e.getMessage()
+                .contains(
+                    TSStatusCode.PATH_NOT_EXIST.getStatusCode()
+                        + ": Timeseries [root.**] does not exist or is represented by schema template"));
+      }
 
-    String[] retArray1 = new String[] {"0,4,4,4,4"};
+      String[] retArray1 = new String[] {"0,4,4,4,4"};
 
-    String insertSql = "insert into root.sg%d.d1(time, s1, s2) values(%d, %d, %d)";
-    for (int i = 1; i <= 4; i++) {
-      for (int j = 1; j <= 4; j++) {
-        statement.execute(String.format(insertSql, j, i, i, i));
+      String insertSql = "insert into root.sg%d.d1(time, s1, s2) values(%d, %d, %d)";
+      for (int i = 1; i <= 4; i++) {
+        for (int j = 1; j <= 4; j++) {
+          statement.execute(String.format(insertSql, j, i, i, i));
+        }
       }
-    }
 
-    int cnt = 0;
-    try (ResultSet resultSet = statement.executeQuery("select count(s1) from root.*.d1")) {
-      while (resultSet.next()) {
-        StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
-        for (int i = 1; i <= 4; i++) {
-          ans.append(",").append(resultSet.getString(count("root.sg" + i + ".d1.s1")));
+      int cnt = 0;
+      try (ResultSet resultSet = statement.executeQuery("select count(s1) from root.*.d1")) {
+        while (resultSet.next()) {
+          StringBuilder ans = new StringBuilder(resultSet.getString(TIMESTAMP_STR));
+          for (int i = 1; i <= 4; i++) {
+            ans.append(",").append(resultSet.getString(count("root.sg" + i + ".d1.s1")));
+          }
+          Assert.assertEquals(retArray1[cnt], ans.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray1[cnt], ans.toString());
-        cnt++;
+        Assert.assertEquals(retArray1.length, cnt);
       }
-      Assert.assertEquals(retArray1.length, cnt);
-    }
 
-    try {
-      statement.execute("delete timeseries root.*.d1.s3");
-    } catch (SQLException e) {
-      Assert.assertTrue(
-          e.getMessage()
-              .contains(
-                  TSStatusCode.PATH_NOT_EXIST.getStatusCode()
-                      + ": Timeseries [root.*.d1.s3] does not exist or is represented by schema template"));
+      try {
+        statement.execute("delete timeseries root.*.d1.s3");
+      } catch (SQLException e) {
+        Assert.assertTrue(
+            e.getMessage()
+                .contains(
+                    TSStatusCode.PATH_NOT_EXIST.getStatusCode()
+                        + ": Timeseries [root.*.d1.s3] does not exist or is represented by schema template"));
+      }
     }
   }
 
@@ -439,29 +451,31 @@ public class IoTDBDeleteTimeseriesIT extends AbstractSchemaIT {
   public void dropTimeseriesTest() throws Exception {
     String[] retArray = new String[] {"1,1,", "2,1.1,"};
     int cnt = 0;
-
-    statement.execute(
-        "create timeseries root.turbine1.d1.s1 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
-    statement.execute(
-        "create timeseries root.turbine1.d1.s2 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
-    statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1,s2) VALUES(1,1,2)");
-
-    try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
-      ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-      while (resultSet.next()) {
-        StringBuilder builder = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          builder.append(resultSet.getString(i)).append(",");
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute(
+          "create timeseries root.turbine1.d1.s1 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
+      statement.execute(
+          "create timeseries root.turbine1.d1.s2 with datatype=INT64, encoding=PLAIN, compression=SNAPPY");
+      statement.execute("INSERT INTO root.turbine1.d1(timestamp,s1,s2) VALUES(1,1,2)");
+
+      try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.turbine1.d1")) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            builder.append(resultSet.getString(i)).append(",");
+          }
+          Assert.assertEquals(retArray[cnt], builder.toString());
+          cnt++;
         }
-        Assert.assertEquals(retArray[cnt], builder.toString());
-        cnt++;
       }
-    }
-    statement.execute("DROP timeseries root.turbine1.d1.s1");
-    statement.execute("FLUSH");
+      statement.execute("DROP timeseries root.turbine1.d1.s1");
+      statement.execute("FLUSH");
 
-    try (ResultSet resultSet = statement.executeQuery("show timeseries root.turbine1.d1")) {
-      Assert.assertFalse(resultSet.next());
+      try (ResultSet resultSet = statement.executeQuery("show timeseries root.turbine1.d1")) {
+        Assert.assertFalse(resultSet.next());
+      }
     }
   }
 }
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBSchemaTemplateIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBSchemaTemplateIT.java
index 36f7ec6dbb..bc6b0f6a49 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBSchemaTemplateIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBSchemaTemplateIT.java
@@ -49,189 +49,188 @@ import java.util.Set;
 @Category({ClusterIT.class})
 public class IoTDBSchemaTemplateIT {
 
-  private Statement statement;
-  private Connection connection;
-
   @Before
   public void setUp() throws Exception {
     EnvFactory.getEnv().initClusterEnvironment();
-    connection = EnvFactory.getEnv().getConnection();
-    statement = connection.createStatement();
 
     prepareTemplate();
   }
 
   @After
   public void tearDown() throws Exception {
-    statement.close();
-    connection.close();
     EnvFactory.getEnv().cleanClusterEnvironment();
   }
 
   @Test
   public void testCreateTemplateAndCreateTimeseries() throws SQLException {
     // test create schema template repeatedly
-    try {
-      statement.execute(
-          "CREATE SCHEMA TEMPLATE t1 (s1 INT64 encoding=RLE compressor=SNAPPY, s2 INT32)");
-      Assert.fail();
-    } catch (SQLException e) {
-      Assert.assertEquals(
-          TSStatusCode.METADATA_ERROR.getStatusCode() + ": Duplicated template name: t1",
-          e.getMessage());
-    }
-
-    // set schema template
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
-    statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg1.d2");
-
-    // test drop template which has been set
-    try {
-      statement.execute("DROP SCHEMA TEMPLATE t1");
-      Assert.fail();
-    } catch (SQLException e) {
-      Assert.assertEquals(
-          TSStatusCode.METADATA_ERROR.getStatusCode()
-              + ": Template [t1] has been set on MTree, cannot be dropped now.",
-          e.getMessage());
-    }
-
-    try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.sg1.**")) {
-      Assert.assertFalse(resultSet.next());
-    }
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      try {
+        statement.execute(
+            "CREATE SCHEMA TEMPLATE t1 (s1 INT64 encoding=RLE compressor=SNAPPY, s2 INT32)");
+        Assert.fail();
+      } catch (SQLException e) {
+        Assert.assertEquals(
+            TSStatusCode.METADATA_ERROR.getStatusCode() + ": Duplicated template name: t1",
+            e.getMessage());
+      }
 
-    // create timeseries of schema template
-    statement.execute("CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.sg1.d1");
-    statement.execute("CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.sg1.d2");
+      // set schema template
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
+      statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg1.d2");
+
+      // test drop template which has been set
+      try {
+        statement.execute("DROP SCHEMA TEMPLATE t1");
+        Assert.fail();
+      } catch (SQLException e) {
+        Assert.assertEquals(
+            TSStatusCode.METADATA_ERROR.getStatusCode()
+                + ": Template [t1] has been set on MTree, cannot be dropped now.",
+            e.getMessage());
+      }
 
-    Set<String> expectedResult =
-        new HashSet<>(
-            Arrays.asList(
-                "root.sg1.d1.s1,INT64,RLE,SNAPPY",
-                "root.sg1.d1.s2,DOUBLE,GORILLA,SNAPPY",
-                "root.sg1.d2.s1,INT64,RLE,SNAPPY",
-                "root.sg1.d2.s2,DOUBLE,GORILLA,SNAPPY"));
+      try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.sg1.**")) {
+        Assert.assertFalse(resultSet.next());
+      }
 
-    try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.sg1.**"); ) {
-      while (resultSet.next()) {
-        String actualResult =
-            resultSet.getString(ColumnHeaderConstant.TIMESERIES)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.DATATYPE)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.ENCODING)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.COMPRESSION);
-        Assert.assertTrue(expectedResult.contains(actualResult));
-        expectedResult.remove(actualResult);
+      // create timeseries of schema template
+      statement.execute("CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.sg1.d1");
+      statement.execute("CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.sg1.d2");
+
+      Set<String> expectedResult =
+          new HashSet<>(
+              Arrays.asList(
+                  "root.sg1.d1.s1,INT64,RLE,SNAPPY",
+                  "root.sg1.d1.s2,DOUBLE,GORILLA,SNAPPY",
+                  "root.sg1.d2.s1,INT64,RLE,SNAPPY",
+                  "root.sg1.d2.s2,DOUBLE,GORILLA,SNAPPY"));
+
+      try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.sg1.**"); ) {
+        while (resultSet.next()) {
+          String actualResult =
+              resultSet.getString(ColumnHeaderConstant.TIMESERIES)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.DATATYPE)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.ENCODING)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.COMPRESSION);
+          Assert.assertTrue(expectedResult.contains(actualResult));
+          expectedResult.remove(actualResult);
+        }
       }
-    }
-    Assert.assertTrue(expectedResult.isEmpty());
+      Assert.assertTrue(expectedResult.isEmpty());
 
-    try (ResultSet resultSet = statement.executeQuery("COUNT TIMESERIES root.sg1.**")) {
-      resultSet.next();
-      Assert.assertEquals(4, resultSet.getLong(1));
-    }
+      try (ResultSet resultSet = statement.executeQuery("COUNT TIMESERIES root.sg1.**")) {
+        resultSet.next();
+        Assert.assertEquals(4, resultSet.getLong(1));
+      }
 
-    expectedResult = new HashSet<>(Arrays.asList("root.sg1.d1,false", "root.sg1.d2,true"));
+      expectedResult = new HashSet<>(Arrays.asList("root.sg1.d1,false", "root.sg1.d2,true"));
 
-    try (ResultSet resultSet = statement.executeQuery("SHOW DEVICES")) {
-      while (resultSet.next()) {
-        String actualResult =
-            resultSet.getString(ColumnHeaderConstant.DEVICE)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.IS_ALIGNED);
-        Assert.assertTrue(expectedResult.contains(actualResult));
-        expectedResult.remove(actualResult);
+      try (ResultSet resultSet = statement.executeQuery("SHOW DEVICES")) {
+        while (resultSet.next()) {
+          String actualResult =
+              resultSet.getString(ColumnHeaderConstant.DEVICE)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.IS_ALIGNED);
+          Assert.assertTrue(expectedResult.contains(actualResult));
+          expectedResult.remove(actualResult);
+        }
+      }
+      Assert.assertTrue(expectedResult.isEmpty());
+
+      try {
+        statement.execute("UNSET SCHEMA TEMPLATE t1 FROM root.sg1.d1");
+        Assert.fail();
+      } catch (SQLException e) {
+        Assert.assertEquals(
+            TSStatusCode.TEMPLATE_IS_IN_USE.getStatusCode() + ": Template is in use on root.sg1.d1",
+            e.getMessage());
       }
-    }
-    Assert.assertTrue(expectedResult.isEmpty());
-
-    try {
-      statement.execute("UNSET SCHEMA TEMPLATE t1 FROM root.sg1.d1");
-      Assert.fail();
-    } catch (SQLException e) {
-      Assert.assertEquals(
-          TSStatusCode.TEMPLATE_IS_IN_USE.getStatusCode() + ": Template is in use on root.sg1.d1",
-          e.getMessage());
     }
   }
 
   @Test
   public void testCreateAndSetSchemaTemplate() throws SQLException {
     // test create schema template repeatedly
-    try {
-      statement.execute(
-          "CREATE SCHEMA TEMPLATE t1 (s1 INT64 encoding=RLE compressor=SNAPPY, s2 INT32)");
-      Assert.fail();
-    } catch (SQLException e) {
-      Assert.assertEquals(
-          TSStatusCode.METADATA_ERROR.getStatusCode() + ": Duplicated template name: t1",
-          e.getMessage());
-    }
-
-    // set schema template
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
-    statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg1.d2");
-
-    try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.sg1.**")) {
-      Assert.assertFalse(resultSet.next());
-    }
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      try {
+        statement.execute(
+            "CREATE SCHEMA TEMPLATE t1 (s1 INT64 encoding=RLE compressor=SNAPPY, s2 INT32)");
+        Assert.fail();
+      } catch (SQLException e) {
+        Assert.assertEquals(
+            TSStatusCode.METADATA_ERROR.getStatusCode() + ": Duplicated template name: t1",
+            e.getMessage());
+      }
 
-    // set using schema template
-    statement.execute("INSERT INTO root.sg1.d1(time,s1) VALUES (1,1)");
-    statement.execute("INSERT INTO root.sg1.d2(time,s1) ALIGNED VALUES (1,1)");
+      // set schema template
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
+      statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg1.d2");
 
-    Set<String> expectedResult =
-        new HashSet<>(
-            Arrays.asList(
-                "root.sg1.d1.s1,INT64,RLE,SNAPPY",
-                "root.sg1.d1.s2,DOUBLE,GORILLA,SNAPPY",
-                "root.sg1.d2.s1,INT64,RLE,SNAPPY",
-                "root.sg1.d2.s2,DOUBLE,GORILLA,SNAPPY"));
+      try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.sg1.**")) {
+        Assert.assertFalse(resultSet.next());
+      }
 
-    try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.sg1.**")) {
-      while (resultSet.next()) {
-        String actualResult =
-            resultSet.getString(ColumnHeaderConstant.TIMESERIES)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.DATATYPE)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.ENCODING)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.COMPRESSION);
-        Assert.assertTrue(expectedResult.contains(actualResult));
-        expectedResult.remove(actualResult);
+      // set using schema template
+      statement.execute("INSERT INTO root.sg1.d1(time,s1) VALUES (1,1)");
+      statement.execute("INSERT INTO root.sg1.d2(time,s1) ALIGNED VALUES (1,1)");
+
+      Set<String> expectedResult =
+          new HashSet<>(
+              Arrays.asList(
+                  "root.sg1.d1.s1,INT64,RLE,SNAPPY",
+                  "root.sg1.d1.s2,DOUBLE,GORILLA,SNAPPY",
+                  "root.sg1.d2.s1,INT64,RLE,SNAPPY",
+                  "root.sg1.d2.s2,DOUBLE,GORILLA,SNAPPY"));
+
+      try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.sg1.**")) {
+        while (resultSet.next()) {
+          String actualResult =
+              resultSet.getString(ColumnHeaderConstant.TIMESERIES)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.DATATYPE)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.ENCODING)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.COMPRESSION);
+          Assert.assertTrue(expectedResult.contains(actualResult));
+          expectedResult.remove(actualResult);
+        }
       }
-    }
-    Assert.assertTrue(expectedResult.isEmpty());
+      Assert.assertTrue(expectedResult.isEmpty());
 
-    try (ResultSet resultSet = statement.executeQuery("COUNT TIMESERIES root.sg1.**")) {
-      resultSet.next();
-      Assert.assertEquals(4, resultSet.getLong(1));
-    }
+      try (ResultSet resultSet = statement.executeQuery("COUNT TIMESERIES root.sg1.**")) {
+        resultSet.next();
+        Assert.assertEquals(4, resultSet.getLong(1));
+      }
 
-    expectedResult = new HashSet<>(Arrays.asList("root.sg1.d1,false", "root.sg1.d2,true"));
+      expectedResult = new HashSet<>(Arrays.asList("root.sg1.d1,false", "root.sg1.d2,true"));
 
-    try (ResultSet resultSet = statement.executeQuery("SHOW DEVICES")) {
-      while (resultSet.next()) {
-        String actualResult =
-            resultSet.getString(ColumnHeaderConstant.DEVICE)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.IS_ALIGNED);
-        Assert.assertTrue(expectedResult.contains(actualResult));
-        expectedResult.remove(actualResult);
+      try (ResultSet resultSet = statement.executeQuery("SHOW DEVICES")) {
+        while (resultSet.next()) {
+          String actualResult =
+              resultSet.getString(ColumnHeaderConstant.DEVICE)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.IS_ALIGNED);
+          Assert.assertTrue(expectedResult.contains(actualResult));
+          expectedResult.remove(actualResult);
+        }
+      }
+      Assert.assertTrue(expectedResult.isEmpty());
+
+      try {
+        statement.execute("UNSET SCHEMA TEMPLATE t1 FROM root.sg1.d1");
+        Assert.fail();
+      } catch (SQLException e) {
+        Assert.assertEquals(
+            TSStatusCode.TEMPLATE_IS_IN_USE.getStatusCode() + ": Template is in use on root.sg1.d1",
+            e.getMessage());
       }
-    }
-    Assert.assertTrue(expectedResult.isEmpty());
-
-    try {
-      statement.execute("UNSET SCHEMA TEMPLATE t1 FROM root.sg1.d1");
-      Assert.fail();
-    } catch (SQLException e) {
-      Assert.assertEquals(
-          TSStatusCode.TEMPLATE_IS_IN_USE.getStatusCode() + ": Template is in use on root.sg1.d1",
-          e.getMessage());
     }
   }
 
@@ -240,27 +239,30 @@ public class IoTDBSchemaTemplateIT {
     // show schema templates
     String[] expectedResult = new String[] {"t1", "t2"};
     Set<String> expectedResultSet = new HashSet<>(Arrays.asList(expectedResult));
-    try (ResultSet resultSet = statement.executeQuery("SHOW SCHEMA TEMPLATES")) {
-      while (resultSet.next()) {
-        Assert.assertTrue(
-            expectedResultSet.contains(resultSet.getString(ColumnHeaderConstant.TEMPLATE_NAME)));
-        expectedResultSet.remove(resultSet.getString(ColumnHeaderConstant.TEMPLATE_NAME));
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      try (ResultSet resultSet = statement.executeQuery("SHOW SCHEMA TEMPLATES")) {
+        while (resultSet.next()) {
+          Assert.assertTrue(
+              expectedResultSet.contains(resultSet.getString(ColumnHeaderConstant.TEMPLATE_NAME)));
+          expectedResultSet.remove(resultSet.getString(ColumnHeaderConstant.TEMPLATE_NAME));
+        }
       }
-    }
-    Assert.assertEquals(0, expectedResultSet.size());
-
-    // drop schema template
-    statement.execute("DROP SCHEMA TEMPLATE t2");
-    expectedResult = new String[] {"t1"};
-    expectedResultSet = new HashSet<>(Arrays.asList(expectedResult));
-    try (ResultSet resultSet = statement.executeQuery("SHOW SCHEMA TEMPLATES")) {
-      while (resultSet.next()) {
-        Assert.assertTrue(
-            expectedResultSet.contains(resultSet.getString(ColumnHeaderConstant.TEMPLATE_NAME)));
-        expectedResultSet.remove(resultSet.getString(ColumnHeaderConstant.TEMPLATE_NAME));
+      Assert.assertEquals(0, expectedResultSet.size());
+
+      // drop schema template
+      statement.execute("DROP SCHEMA TEMPLATE t2");
+      expectedResult = new String[] {"t1"};
+      expectedResultSet = new HashSet<>(Arrays.asList(expectedResult));
+      try (ResultSet resultSet = statement.executeQuery("SHOW SCHEMA TEMPLATES")) {
+        while (resultSet.next()) {
+          Assert.assertTrue(
+              expectedResultSet.contains(resultSet.getString(ColumnHeaderConstant.TEMPLATE_NAME)));
+          expectedResultSet.remove(resultSet.getString(ColumnHeaderConstant.TEMPLATE_NAME));
+        }
       }
+      Assert.assertEquals(0, expectedResultSet.size());
     }
-    Assert.assertEquals(0, expectedResultSet.size());
   }
 
   @Test
@@ -268,7 +270,9 @@ public class IoTDBSchemaTemplateIT {
     // set schema template
     Set<String> expectedResultSet =
         new HashSet<>(Arrays.asList("s1,INT64,RLE,SNAPPY", "s2,DOUBLE,GORILLA,SNAPPY"));
-    try (ResultSet resultSet = statement.executeQuery("SHOW NODES IN SCHEMA TEMPLATE t1")) {
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement();
+        ResultSet resultSet = statement.executeQuery("SHOW NODES IN SCHEMA TEMPLATE t1")) {
       while (resultSet.next()) {
         String actualResult =
             resultSet.getString(ColumnHeaderConstant.CHILD_NODES)
@@ -287,246 +291,267 @@ public class IoTDBSchemaTemplateIT {
 
   @Test
   public void testShowPathsSetOrUsingSchemaTemplate() throws SQLException {
-    // set schema template
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d2");
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg2.d1");
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg2.d2");
-    statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg3.d1");
-    statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg3.d2");
-    statement.execute("INSERT INTO root.sg3.d2.verify(time, show) VALUES (1, 1)");
-
-    try (ResultSet resultSet = statement.executeQuery("SHOW PATHS USING SCHEMA TEMPLATE t1")) {
-      String resultRecord;
-      while (resultSet.next()) {
-        resultRecord = resultSet.getString(1);
-        Assert.assertEquals("", resultRecord);
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      // set schema template
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d2");
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg2.d1");
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg2.d2");
+      statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg3.d1");
+      statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg3.d2");
+      statement.execute("INSERT INTO root.sg3.d2.verify(time, show) VALUES (1, 1)");
+
+      try (ResultSet resultSet = statement.executeQuery("SHOW PATHS USING SCHEMA TEMPLATE t1")) {
+        String resultRecord;
+        while (resultSet.next()) {
+          resultRecord = resultSet.getString(1);
+          Assert.assertEquals("", resultRecord);
+        }
       }
-    }
 
-    // activate schema template
-    statement.execute("CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.sg1.d2");
-    statement.execute("CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.sg2.d1");
-
-    // show paths set schema template
-    String[] expectedResult =
-        new String[] {"root.sg1.d1", "root.sg2.d2", "root.sg1.d2", "root.sg2.d1"};
-    Set<String> expectedResultSet = new HashSet<>(Arrays.asList(expectedResult));
-    try (ResultSet resultSet = statement.executeQuery("SHOW PATHS SET SCHEMA TEMPLATE t1")) {
-      String resultRecord;
-      while (resultSet.next()) {
-        resultRecord = resultSet.getString(1);
-        Assert.assertTrue(expectedResultSet.contains(resultRecord));
-        expectedResultSet.remove(resultRecord);
+      // activate schema template
+      statement.execute("CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.sg1.d2");
+      statement.execute("CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.sg2.d1");
+
+      // show paths set schema template
+      String[] expectedResult =
+          new String[] {"root.sg1.d1", "root.sg2.d2", "root.sg1.d2", "root.sg2.d1"};
+      Set<String> expectedResultSet = new HashSet<>(Arrays.asList(expectedResult));
+      try (ResultSet resultSet = statement.executeQuery("SHOW PATHS SET SCHEMA TEMPLATE t1")) {
+        String resultRecord;
+        while (resultSet.next()) {
+          resultRecord = resultSet.getString(1);
+          Assert.assertTrue(expectedResultSet.contains(resultRecord));
+          expectedResultSet.remove(resultRecord);
+        }
       }
-    }
-    Assert.assertEquals(0, expectedResultSet.size());
-
-    expectedResult = new String[] {"root.sg3.d1", "root.sg3.d2"};
-    expectedResultSet = new HashSet<>(Arrays.asList(expectedResult));
-    try (ResultSet resultSet = statement.executeQuery("SHOW PATHS SET SCHEMA TEMPLATE t2")) {
-      String resultRecord;
-      while (resultSet.next()) {
-        resultRecord = resultSet.getString(1);
-        Assert.assertTrue(expectedResultSet.contains(resultRecord));
-        expectedResultSet.remove(resultRecord);
+      Assert.assertEquals(0, expectedResultSet.size());
+
+      expectedResult = new String[] {"root.sg3.d1", "root.sg3.d2"};
+      expectedResultSet = new HashSet<>(Arrays.asList(expectedResult));
+      try (ResultSet resultSet = statement.executeQuery("SHOW PATHS SET SCHEMA TEMPLATE t2")) {
+        String resultRecord;
+        while (resultSet.next()) {
+          resultRecord = resultSet.getString(1);
+          Assert.assertTrue(expectedResultSet.contains(resultRecord));
+          expectedResultSet.remove(resultRecord);
+        }
       }
-    }
-    Assert.assertEquals(0, expectedResultSet.size());
-
-    expectedResult = new String[] {"root.sg1.d2", "root.sg2.d1"};
-    expectedResultSet = new HashSet<>(Arrays.asList(expectedResult));
-    try (ResultSet resultSet = statement.executeQuery("SHOW PATHS USING SCHEMA TEMPLATE t1")) {
-      String resultRecord;
-      while (resultSet.next()) {
-        resultRecord = resultSet.getString(1);
-        Assert.assertTrue(expectedResultSet.contains(resultRecord));
-        expectedResultSet.remove(resultRecord);
+      Assert.assertEquals(0, expectedResultSet.size());
+
+      expectedResult = new String[] {"root.sg1.d2", "root.sg2.d1"};
+      expectedResultSet = new HashSet<>(Arrays.asList(expectedResult));
+      try (ResultSet resultSet = statement.executeQuery("SHOW PATHS USING SCHEMA TEMPLATE t1")) {
+        String resultRecord;
+        while (resultSet.next()) {
+          resultRecord = resultSet.getString(1);
+          Assert.assertTrue(expectedResultSet.contains(resultRecord));
+          expectedResultSet.remove(resultRecord);
+        }
       }
-    }
-    Assert.assertEquals(0, expectedResultSet.size());
+      Assert.assertEquals(0, expectedResultSet.size());
 
-    ResultSet resultSet = statement.executeQuery("SHOW PATHS USING SCHEMA TEMPLATE t2");
-    Assert.assertFalse(resultSet.next());
+      ResultSet resultSet = statement.executeQuery("SHOW PATHS USING SCHEMA TEMPLATE t2");
+      Assert.assertFalse(resultSet.next());
+    }
   }
 
   @Test
   public void testSetAndActivateTemplateOnSGNode() throws SQLException {
-    statement.execute("CREATE DATABASE root.test.sg_satosg");
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.test.sg_satosg");
-    statement.execute("INSERT INTO root.test.sg_satosg(time, s1) VALUES (1, 1)");
-    statement.execute("INSERT INTO root.test.sg_satosg(time, s1) VALUES (2, 2)");
-    ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.test.sg_satosg.**");
-
-    Set<String> expRes =
-        new HashSet<>(
-            Arrays.asList(new String[] {"root.test.sg_satosg.s1", "root.test.sg_satosg.s2"}));
-    int resCnt = 0;
-    while (resultSet.next()) {
-      resCnt++;
-      expRes.remove(resultSet.getString(ColumnHeaderConstant.TIMESERIES));
-    }
-    Assert.assertEquals(2, resCnt);
-    Assert.assertTrue(expRes.isEmpty());
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute("CREATE DATABASE root.test.sg_satosg");
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.test.sg_satosg");
+      statement.execute("INSERT INTO root.test.sg_satosg(time, s1) VALUES (1, 1)");
+      statement.execute("INSERT INTO root.test.sg_satosg(time, s1) VALUES (2, 2)");
+      ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.test.sg_satosg.**");
+
+      Set<String> expRes =
+          new HashSet<>(
+              Arrays.asList(new String[] {"root.test.sg_satosg.s1", "root.test.sg_satosg.s2"}));
+      int resCnt = 0;
+      while (resultSet.next()) {
+        resCnt++;
+        expRes.remove(resultSet.getString(ColumnHeaderConstant.TIMESERIES));
+      }
+      Assert.assertEquals(2, resCnt);
+      Assert.assertTrue(expRes.isEmpty());
 
-    resultSet = statement.executeQuery("SELECT COUNT(s1) from root.test.sg_satosg");
-    while (resultSet.next()) {
-      Assert.assertEquals(2L, resultSet.getLong("COUNT(root.test.sg_satosg.s1)"));
+      resultSet = statement.executeQuery("SELECT COUNT(s1) from root.test.sg_satosg");
+      while (resultSet.next()) {
+        Assert.assertEquals(2L, resultSet.getLong("COUNT(root.test.sg_satosg.s1)"));
+      }
     }
   }
 
   private void prepareTemplate() throws SQLException {
-    // create database
-    statement.execute("CREATE DATABASE root.sg1");
-    statement.execute("CREATE DATABASE root.sg2");
-    statement.execute("CREATE DATABASE root.sg3");
-
-    // create schema template
-    statement.execute("CREATE SCHEMA TEMPLATE t1 (s1 INT64, s2 DOUBLE)");
-    statement.execute("CREATE SCHEMA TEMPLATE t2 aligned (s1 INT64, s2 DOUBLE)");
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      // create database
+      statement.execute("CREATE DATABASE root.sg1");
+      statement.execute("CREATE DATABASE root.sg2");
+      statement.execute("CREATE DATABASE root.sg3");
+
+      // create schema template
+      statement.execute("CREATE SCHEMA TEMPLATE t1 (s1 INT64, s2 DOUBLE)");
+      statement.execute("CREATE SCHEMA TEMPLATE t2 aligned (s1 INT64, s2 DOUBLE)");
+    }
   }
 
   @Test
   public void testDeleteTimeSeriesWhenUsingTemplate() throws SQLException {
-    // set schema template
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
-    statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg1.d2");
-
-    statement.execute("CREATE TIMESERIES root.sg3.d1.s1 INT64");
-
-    // set using schema template
-    statement.execute("INSERT INTO root.sg1.d1(time,s1) VALUES (1,1)");
-    statement.execute("INSERT INTO root.sg1.d2(time,s1) ALIGNED VALUES (1,1)");
-    statement.execute("INSERT INTO root.sg3.d1(time,s1) VALUES (1,1)");
-
-    Set<String> expectedResult = new HashSet<>(Collections.singletonList("1,1,1,1,"));
-
-    try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.**")) {
-      while (resultSet.next()) {
-        StringBuilder stringBuilder = new StringBuilder();
-        for (int i = 1; i <= 4; i++) {
-          stringBuilder.append(resultSet.getString(i)).append(",");
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      // set schema template
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
+      statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg1.d2");
+
+      statement.execute("CREATE TIMESERIES root.sg3.d1.s1 INT64");
+
+      // set using schema template
+      statement.execute("INSERT INTO root.sg1.d1(time,s1) VALUES (1,1)");
+      statement.execute("INSERT INTO root.sg1.d2(time,s1) ALIGNED VALUES (1,1)");
+      statement.execute("INSERT INTO root.sg3.d1(time,s1) VALUES (1,1)");
+
+      Set<String> expectedResult = new HashSet<>(Collections.singletonList("1,1,1,1,"));
+
+      try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.**")) {
+        while (resultSet.next()) {
+          StringBuilder stringBuilder = new StringBuilder();
+          for (int i = 1; i <= 4; i++) {
+            stringBuilder.append(resultSet.getString(i)).append(",");
+          }
+          String actualResult = stringBuilder.toString();
+          Assert.assertTrue(expectedResult.contains(actualResult));
+          expectedResult.remove(actualResult);
         }
-        String actualResult = stringBuilder.toString();
-        Assert.assertTrue(expectedResult.contains(actualResult));
-        expectedResult.remove(actualResult);
       }
-    }
-    Assert.assertTrue(expectedResult.isEmpty());
-
-    statement.execute("DELETE TIMESERIES root.**.s1");
-
-    expectedResult =
-        new HashSet<>(
-            Arrays.asList("root.sg1.d1.s1,INT64,RLE,SNAPPY", "root.sg1.d2.s1,INT64,RLE,SNAPPY"));
-
-    try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.**.s1")) {
-      while (resultSet.next()) {
-        String actualResult =
-            resultSet.getString(ColumnHeaderConstant.TIMESERIES)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.DATATYPE)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.ENCODING)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.COMPRESSION);
-        Assert.assertTrue(expectedResult.contains(actualResult));
-        expectedResult.remove(actualResult);
+      Assert.assertTrue(expectedResult.isEmpty());
+
+      statement.execute("DELETE TIMESERIES root.**.s1");
+
+      expectedResult =
+          new HashSet<>(
+              Arrays.asList("root.sg1.d1.s1,INT64,RLE,SNAPPY", "root.sg1.d2.s1,INT64,RLE,SNAPPY"));
+
+      try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.**.s1")) {
+        while (resultSet.next()) {
+          String actualResult =
+              resultSet.getString(ColumnHeaderConstant.TIMESERIES)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.DATATYPE)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.ENCODING)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.COMPRESSION);
+          Assert.assertTrue(expectedResult.contains(actualResult));
+          expectedResult.remove(actualResult);
+        }
       }
-    }
-    Assert.assertTrue(expectedResult.isEmpty());
+      Assert.assertTrue(expectedResult.isEmpty());
 
-    try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.**")) {
-      Assert.assertFalse(resultSet.next());
+      try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.**")) {
+        Assert.assertFalse(resultSet.next());
+      }
     }
   }
 
   @Test
   public void testSchemaQueryAndFetchWithUnrelatedTemplate() throws SQLException {
-    statement.execute("CREATE SCHEMA TEMPLATE t3 (s3 INT64, s4 DOUBLE)");
-
-    // set schema template
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
-    statement.execute("SET SCHEMA TEMPLATE t3 TO root.sg1.d2");
-
-    // set using schema template
-    statement.execute("INSERT INTO root.sg1.d1(time,s1) VALUES (1,1)");
-    statement.execute("INSERT INTO root.sg1.d2(time,s3) VALUES (1,1)");
-
-    Set<String> expectedResult = new HashSet<>(Collections.singletonList("1,1,"));
-
-    try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.**")) {
-      while (resultSet.next()) {
-        StringBuilder stringBuilder = new StringBuilder();
-        for (int i = 1; i <= 2; i++) {
-          stringBuilder.append(resultSet.getString(i)).append(",");
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute("CREATE SCHEMA TEMPLATE t3 (s3 INT64, s4 DOUBLE)");
+
+      // set schema template
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
+      statement.execute("SET SCHEMA TEMPLATE t3 TO root.sg1.d2");
+
+      // set using schema template
+      statement.execute("INSERT INTO root.sg1.d1(time,s1) VALUES (1,1)");
+      statement.execute("INSERT INTO root.sg1.d2(time,s3) VALUES (1,1)");
+
+      Set<String> expectedResult = new HashSet<>(Collections.singletonList("1,1,"));
+
+      try (ResultSet resultSet = statement.executeQuery("SELECT s1 FROM root.**")) {
+        while (resultSet.next()) {
+          StringBuilder stringBuilder = new StringBuilder();
+          for (int i = 1; i <= 2; i++) {
+            stringBuilder.append(resultSet.getString(i)).append(",");
+          }
+          String actualResult = stringBuilder.toString();
+          Assert.assertTrue(expectedResult.contains(actualResult));
+          expectedResult.remove(actualResult);
         }
-        String actualResult = stringBuilder.toString();
-        Assert.assertTrue(expectedResult.contains(actualResult));
-        expectedResult.remove(actualResult);
       }
-    }
-    Assert.assertTrue(expectedResult.isEmpty());
-
-    expectedResult = new HashSet<>(Collections.singletonList("root.sg1.d1.s1,INT64,RLE,SNAPPY"));
-
-    try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.**.s1")) {
-      while (resultSet.next()) {
-        String actualResult =
-            resultSet.getString(ColumnHeaderConstant.TIMESERIES)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.DATATYPE)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.ENCODING)
-                + ","
-                + resultSet.getString(ColumnHeaderConstant.COMPRESSION);
-        Assert.assertTrue(expectedResult.contains(actualResult));
-        expectedResult.remove(actualResult);
+      Assert.assertTrue(expectedResult.isEmpty());
+
+      expectedResult = new HashSet<>(Collections.singletonList("root.sg1.d1.s1,INT64,RLE,SNAPPY"));
+
+      try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.**.s1")) {
+        while (resultSet.next()) {
+          String actualResult =
+              resultSet.getString(ColumnHeaderConstant.TIMESERIES)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.DATATYPE)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.ENCODING)
+                  + ","
+                  + resultSet.getString(ColumnHeaderConstant.COMPRESSION);
+          Assert.assertTrue(expectedResult.contains(actualResult));
+          expectedResult.remove(actualResult);
+        }
       }
+      Assert.assertTrue(expectedResult.isEmpty());
     }
-    Assert.assertTrue(expectedResult.isEmpty());
   }
 
   @Test
   public void testInsertDataWithMeasurementsBeyondTemplate() throws Exception {
-    // set schema template
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
-    // insert data and auto activate schema template
-    statement.execute("INSERT INTO root.sg1.d1(time,s1,s2) VALUES (1,1,1)");
-    // insert twice to make sure the timeseries in template has been cached
-    statement.execute("INSERT INTO root.sg1.d1(time,s1,s2) VALUES (2,1,1)");
-
-    // insert data with extra measurement s3 which should be checked by schema fetch and auto
-    // created
-    statement.execute("INSERT INTO root.sg1.d1(time,s1,s2,s3) VALUES (2,1,1,1)");
-
-    try (ResultSet resultSet = statement.executeQuery("count timeseries")) {
-      Assert.assertTrue(resultSet.next());
-      long resultRecord = resultSet.getLong(1);
-      Assert.assertEquals(3, resultRecord);
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      // set schema template
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
+      // insert data and auto activate schema template
+      statement.execute("INSERT INTO root.sg1.d1(time,s1,s2) VALUES (1,1,1)");
+      // insert twice to make sure the timeseries in template has been cached
+      statement.execute("INSERT INTO root.sg1.d1(time,s1,s2) VALUES (2,1,1)");
+
+      // insert data with extra measurement s3 which should be checked by schema fetch and auto
+      // created
+      statement.execute("INSERT INTO root.sg1.d1(time,s1,s2,s3) VALUES (2,1,1,1)");
+
+      try (ResultSet resultSet = statement.executeQuery("count timeseries")) {
+        Assert.assertTrue(resultSet.next());
+        long resultRecord = resultSet.getLong(1);
+        Assert.assertEquals(3, resultRecord);
+      }
     }
   }
 
   @Test
   public void testUnsetTemplate() throws SQLException {
-    // set schema template
-    statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
-    // show paths set schema template
-    String[] expectedResult = new String[] {"root.sg1.d1"};
-    Set<String> expectedResultSet = new HashSet<>(Arrays.asList(expectedResult));
-    try (ResultSet resultSet = statement.executeQuery("SHOW PATHS SET SCHEMA TEMPLATE t1")) {
-      String resultRecord;
-      while (resultSet.next()) {
-        resultRecord = resultSet.getString(1);
-        Assert.assertTrue(expectedResultSet.contains(resultRecord));
-        expectedResultSet.remove(resultRecord);
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      // set schema template
+      statement.execute("SET SCHEMA TEMPLATE t1 TO root.sg1.d1");
+      // show paths set schema template
+      String[] expectedResult = new String[] {"root.sg1.d1"};
+      Set<String> expectedResultSet = new HashSet<>(Arrays.asList(expectedResult));
+      try (ResultSet resultSet = statement.executeQuery("SHOW PATHS SET SCHEMA TEMPLATE t1")) {
+        String resultRecord;
+        while (resultSet.next()) {
+          resultRecord = resultSet.getString(1);
+          Assert.assertTrue(expectedResultSet.contains(resultRecord));
+          expectedResultSet.remove(resultRecord);
+        }
+      }
+      Assert.assertEquals(0, expectedResultSet.size());
+      // unset schema template
+      statement.execute("UNSET SCHEMA TEMPLATE t1 FROM root.sg1.d1");
+      try (ResultSet resultSet = statement.executeQuery("SHOW PATHS SET SCHEMA TEMPLATE t1")) {
+        Assert.assertFalse(resultSet.next());
       }
-    }
-    Assert.assertEquals(0, expectedResultSet.size());
-    // unset schema template
-    statement.execute("UNSET SCHEMA TEMPLATE t1 FROM root.sg1.d1");
-    try (ResultSet resultSet = statement.executeQuery("SHOW PATHS SET SCHEMA TEMPLATE t1")) {
-      Assert.assertFalse(resultSet.next());
     }
   }
 }