2015-12-01 38 views
0

我試圖運行聯接多個表,然後我想用它來獲得從ResultSet列的詳細信息,如姓名,等(無論我可以得到)查詢。DatabaseMetaData的多個表

使用查詢沒有聯接,我會做這樣的事情:

DatabaseMetaData dmd = connection.getMetaData(); 
try (ResultSet rs = dmd.getColumns(null, null, tableName, null)) { 
      while (rs.next()) { 
       String columnName = rs.getString("COLUMN_NAME"); 
       String columnType = rs.getString("TYPE_NAME"); 
       Integer columnLength = rs.getInt("COLUMN_SIZE"); 
       Boolean columnPrimaryKey = false; 
       ResultSet primaryKeysSet = columnMeta.getPrimaryKeys(null, null, clazz.getSimpleName()); 
       while (primaryKeysSet.next()) { 
        if (primaryKeysSet.getString(4).equalsIgnoreCase(columnName)) { 
         columnPrimaryKey = true; 
        } 
       } 
       Boolean columnNotNull = columnResultSet.getString("NULLABLE").equals("0"); 
      } 
     } 

然而,據dmd.getColumns(null, null, tableName, null)去,我將有一個問題得到tableName,因爲它是多個表。

有沒有辦法從查詢獲取列數據來自多個表的連接?

回答

0

使用相同的原則,但在你的(加入)的查詢結果集調用getMetaData()

這裏簡單的例子 - 你應該利用PreparedStatement

對不起,使用Groovy - 但它應該清楚如何在Java中

ResultSet rs = dmd.createStatement().executeQuery('select * from ta, tb') // your join statement here 
def rsmd = rs.getMetaData(); 
def colCount = rsmd.getColumnCount() 

println "getColumnCount ${colCount}" 

colCount.times {i -> 
    println "---------------------------------" 
    println "columnName ${rsmd.getColumnName(i+1)}" 
    println "columnType ${rsmd.getColumnTypeName(i+1)}" 
    println "Precision ${rsmd.getPrecision(i+1)}" 
    println "Scale ${rsmd.getScale(i+1)}" 
    println "isNullable ${rsmd.isNullable(i+1)}" 
    // Oracle extension 
    println "isNCHAR ${rsmd.isNCHAR(i+1)}" 
    // print column value as String 
    println rs.getString(i+1) 
}