使用配置单元的JDBC元数据API获得不明确的结果

使用配置单元的JDBC元数据API获得不明确的结果,jdbc,hive,database-metadata,Jdbc,Hive,Database Metadata,我正在尝试使用DatabaseMetaData以类似于RDBMS的方式获取配置单元的表名 示例代码: try (Connection con = getJdbcConnection(connectionUri, driverName, username, password);) { DatabaseMetaData metadata = con.getMetaData(); ResultSet rs = metadata.getTables(null, null,

我正在尝试使用
DatabaseMetaData
以类似于RDBMS的方式获取配置单元的表名

示例代码:

try (Connection con = getJdbcConnection(connectionUri, driverName, username, password);) {
        DatabaseMetaData metadata = con.getMetaData();
        ResultSet rs = metadata.getTables(null, null, tableName, null);
        while (rs.next()) {
            System.out.println(rs.getString(3));
       }

  } catch (SQLException e) {
  }

private static void registerDriver(String driverName) {
        try {
            Class.forName(driverName);
         } catch (ClassNotFoundException e) {
            LOG.error("No class found for " + driverName + ". Details: " + e);
        }
    }

private static Connection getJdbcConnection(String connectionUri, String driverName, String username,
        String password) throws SQLException{
    registerDriver(driverName);
    return DriverManager.getConnection(connectionUri, username,password);
}
    try (Connection con = getJdbcConnection(connectionUri, driverName, username, password);) {
        DatabaseMetaData metadata = con.getMetaData();
        ResultSet rs = metadata.getTables(null, schemaName, tableName, new String[] { "TABLE" });

        while (rs.next()) {
            String tName = rs.getString("TABLE_NAME");
            if (tName != null && tName.equals(tableName)) {
                LOG.info("Table [" + tableName + "] is present in the Database.");
                return true;
            }
        }
        rs.close();

        LOG.info("Table [" + tableName + "] is not present in the Database.");
        return false;

    } catch (SQLException e) {
        LOG.error("Not able to get Table Metadata . Caused By: " + e);
    }
特定数据库中没有表。使用不同的表名,我得到了不同的输出

例如:

我把表名
emp
,有3条记录的名称
emp

我放入表名
employee
,有5条记录名为
employee

我输入了表名
emp12
,它没有返回任何记录(这是预期的)


  • 我做错什么了吗

  • 我是否应该使用
    DatabaseMetaData
    检查表的存在


我需要在
getTables
方法中传递模式名称

签名:

ResultSet getTables(String catalog,
                  String schemaPattern,
                  String tableNamePattern,
                  String[] types)
                    throws SQLException
我通过了以下考试:

  • catalog=null
  • schemaPattern=配置单元架构名称
  • tableNamePattern=配置单元表名
  • 类型=
    新字符串[]{“表”}
示例代码:

try (Connection con = getJdbcConnection(connectionUri, driverName, username, password);) {
        DatabaseMetaData metadata = con.getMetaData();
        ResultSet rs = metadata.getTables(null, null, tableName, null);
        while (rs.next()) {
            System.out.println(rs.getString(3));
       }

  } catch (SQLException e) {
  }

private static void registerDriver(String driverName) {
        try {
            Class.forName(driverName);
         } catch (ClassNotFoundException e) {
            LOG.error("No class found for " + driverName + ". Details: " + e);
        }
    }

private static Connection getJdbcConnection(String connectionUri, String driverName, String username,
        String password) throws SQLException{
    registerDriver(driverName);
    return DriverManager.getConnection(connectionUri, username,password);
}
    try (Connection con = getJdbcConnection(connectionUri, driverName, username, password);) {
        DatabaseMetaData metadata = con.getMetaData();
        ResultSet rs = metadata.getTables(null, schemaName, tableName, new String[] { "TABLE" });

        while (rs.next()) {
            String tName = rs.getString("TABLE_NAME");
            if (tName != null && tName.equals(tableName)) {
                LOG.info("Table [" + tableName + "] is present in the Database.");
                return true;
            }
        }
        rs.close();

        LOG.info("Table [" + tableName + "] is not present in the Database.");
        return false;

    } catch (SQLException e) {
        LOG.error("Not able to get Table Metadata . Caused By: " + e);
    }

我需要在
getTables
方法中传递模式名

签名:

ResultSet getTables(String catalog,
                  String schemaPattern,
                  String tableNamePattern,
                  String[] types)
                    throws SQLException
我通过了以下考试:

  • catalog=null
  • schemaPattern=配置单元架构名称
  • tableNamePattern=配置单元表名
  • 类型=
    新字符串[]{“表”}
示例代码:

try (Connection con = getJdbcConnection(connectionUri, driverName, username, password);) {
        DatabaseMetaData metadata = con.getMetaData();
        ResultSet rs = metadata.getTables(null, null, tableName, null);
        while (rs.next()) {
            System.out.println(rs.getString(3));
       }

  } catch (SQLException e) {
  }

private static void registerDriver(String driverName) {
        try {
            Class.forName(driverName);
         } catch (ClassNotFoundException e) {
            LOG.error("No class found for " + driverName + ". Details: " + e);
        }
    }

private static Connection getJdbcConnection(String connectionUri, String driverName, String username,
        String password) throws SQLException{
    registerDriver(driverName);
    return DriverManager.getConnection(connectionUri, username,password);
}
    try (Connection con = getJdbcConnection(connectionUri, driverName, username, password);) {
        DatabaseMetaData metadata = con.getMetaData();
        ResultSet rs = metadata.getTables(null, schemaName, tableName, new String[] { "TABLE" });

        while (rs.next()) {
            String tName = rs.getString("TABLE_NAME");
            if (tName != null && tName.equals(tableName)) {
                LOG.info("Table [" + tableName + "] is present in the Database.");
                return true;
            }
        }
        rs.close();

        LOG.info("Table [" + tableName + "] is not present in the Database.");
        return false;

    } catch (SQLException e) {
        LOG.error("Not able to get Table Metadata . Caused By: " + e);
    }