diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java index 6343a802af280415b4d21f56476eb4403b4608ac..f1e1585f92481de96bdc1477229719501ca39e05 100644 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java @@ -1,7 +1,10 @@ package com.taosdata.jdbc; +import com.taosdata.jdbc.utils.StringUtils; + import java.sql.*; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public abstract class AbstractDatabaseMetaData extends WrapperImpl implements DatabaseMetaData { @@ -550,9 +553,9 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da } protected ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types, Connection connection) throws SQLException { - if (catalog == null || catalog.isEmpty()) - return null; - if (!isAvailableCatalog(connection, catalog)) + if (StringUtils.isEmpty(catalog)) + catalog = this.getConnection().getCatalog(); + if (!StringUtils.isEmpty(catalog) && !isAvailableCatalog(connection, catalog)) return new EmptyResultSet(); DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet(); @@ -561,8 +564,27 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da // set row data List rowDataList = new ArrayList<>(); try (Statement stmt = connection.createStatement()) { - stmt.execute("use " + catalog); - try (ResultSet tables = stmt.executeQuery("show tables")) { + List dbs = new ArrayList<>(); + if (!StringUtils.isEmpty(catalog)) { + dbs.add(catalog); + } else { + ResultSet dbRs = stmt.executeQuery("show databases"); + while (dbRs.next()) { + dbs.add(dbRs.getString("name")); + } + } + if (dbs.isEmpty()) { + return new EmptyResultSet(); + } + for (String db : dbs) { + stmt.execute("use " + db); + String sql = "show tables "; + String Ssql = "show stables "; + if (!StringUtils.isEmpty(tableNamePattern)) { + sql = sql + "like '" + tableNamePattern + "'"; + Ssql = Ssql + "like '" + tableNamePattern + "'"; + } + ResultSet tables = stmt.executeQuery(sql); while (tables.next()) { TSDBResultSetRowData rowData = new TSDBResultSetRowData(10); rowData.setStringValue(1, catalog); //TABLE_CAT @@ -572,8 +594,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da rowData.setStringValue(5, ""); //REMARKS rowDataList.add(rowData); } - } - try (ResultSet stables = stmt.executeQuery("show stables")) { + ResultSet stables = stmt.executeQuery(Ssql); while (stables.next()) { TSDBResultSetRowData rowData = new TSDBResultSetRowData(10); rowData.setStringValue(1, catalog); //TABLE_CAT diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/StringUtils.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/StringUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..5cd7091c3385aedf4c1f7e7435ddbb4d803c3c62 --- /dev/null +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/StringUtils.java @@ -0,0 +1,7 @@ +package com.taosdata.jdbc.utils; + +public class StringUtils { + public static boolean isEmpty(final CharSequence cs) { + return cs == null || cs.length() == 0; + } +}