2016-10-10 114 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); 
    } 
相關問題