2015-03-25 58 views
0

我有一個SQL查詢來回回,我需要的列名和數據類型,它的表名和模式名從SQL查詢獲取元數據:需要使用Java

Thsi是我使用了使用和測試方法它SQLSERVER:

public static void getMetadataForConn(Connection conn) throws SQLException 
    { 
     ResultSet rs = null; 
     try 
     { 

      Statement stmt = conn.createStatement(); 
      rs = stmt.executeQuery("SELECT AB_DEMO_SRC.dbo.employee.dept_id dept_id, AB_DEMO_SRC.dbo.employee.email_add email_add, AB_DEMO_SRC.dbo.employee.emp_address emp_address, AB_DEMO_SRC.dbo.employee.emp_id emp_id, AB_DEMO_SRC.dbo.employee.emp_name emp_name FROM AB_DEMO_SRC.dbo.employee "); 
      ResultSetMetaData md = rs.getMetaData(); 
      int columnCount = md.getColumnCount(); 
      for (int i = 1; i <= columnCount; i++) 
       System.out.print(md.getColumnName(i) + "(" + md.getColumnType(i) + ") "+md.getSchemaName(i)+"."+md.getTableName(i)); 
      System.out.println(); 
      while (rs.next()) 
      { 
       for (int i = 1; i <= columnCount; i++) 
       { 
        Object o = rs.getObject(i); 
        System.out.print(null == o ? "" : o.toString() + " "); 
       } 
       System.out.println(); 
      } 
      } 
      finally 
      { 
       if (null != rs) 
       { 
        rs.close(); 
       } 
      } 
    } 

我得到像數據類型,精度和scale..Strangely其他元數據的細節,我得到的表名和架構名稱爲「」那是blank..IS有任何其他方式來獲取Query中列的元數據?

+0

通過添加sqljdbc41.jar作爲well..which提到這罐子爲JDK7和jre7試過了,並且它具有JDBC API方法實施..我真的不明白爲什麼同樣的方法返回TableName和ScehmaName爲Teradata和DB2,但不是爲SQL Server和Oracle – user2176576 2015-03-25 13:08:23

回答

0

我認爲問題是ResultSet的列與任何表都沒有關係,它們僅與查詢有關。查詢可能很複雜,它可能會計算列等,這就是爲什麼他們的表名是空白的。通過調用的ResultSet「的getMetaData」的方法

DatabaseMetaData meta = conn.getMetaData(); 
ResultSet columns = meta.getColumns(null, "dbo", "employee", null); 
+0

我在代碼中提到的方法適用於其他查詢,如來自Teradata/DB2,無法指出爲什麼我沒有得到僅用於SQLSERVER和ORACLE的TableName和模式名稱 – user2176576 2015-03-25 12:29:06

0

可以取列名:

如果你想獲得一個特定的表的列的信息,您可以使用數據庫的元數據。

ResultSetMetaData metaData= resultSet.getMetaData(); 
String columnName = metaData.getColumnName(1); 

所有其它列的元數據還可以使用的ResultSetMetaData的對象提取

+0

這正是我在代碼中提到的那樣,謝謝 – user2176576 2015-03-25 12:21:07