2016-10-10 116 views
0

我试图以类似于RDBMS的方式使用DatabaseMetaData来获取配置单元的表名称。使用适用于Hive的JDBC元数据API获取不明确的结果

示例代码:

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); 
} 

有特定数据库中没有表。使用不同的表名称,我得到不同的输出。

例如:

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

我把表名employee,有5条记录与名称employee

我把表名emp12 ,它没有返回记录(预计)


  • 我做错了什么?

  • 我不应该使用DatabaseMetaData检查表的存在吗?

回答

0

我需要在getTables方法通过模式名称

签名:

ResultSet getTables(String catalog, 
        String schemaPattern, 
        String tableNamePattern, 
        String[] types) 
        throws SQLException 

我通过以下agruments:

  • 目录= NULL;
  • schemaPattern =蜂巢模式名称
  • tableNamePattern =蜂房表名称
  • 类型= new String[] { "TABLE" }

样品的编号:

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); 
    } 
相关问题