2013-08-04 38 views
4

我要問有關表我的專欄JDBC類型,我今天循環把我列,然後詢問它的類型,請參閱我下面的代碼:獲取JDBC列類型

public int getColumnDataTypeFromDB(String columnName) { 
    int datatype = 0; 

    ResultSet columns = null; 
    try { 
     String schema = 
      getMetaDataCatalogName() != null 
       ? getMetaDataCatalogName() 
       : getMetaDataSchemaName(); 

     if (TableManagerFactory.isCatalogBasedDatabase()) { 
      columns = 
       getMetaData().getColumns(
        schema, 
        null, 
        tableName, 
        columnName); 
     } else { 
      columns = 
       getMetaData().getColumns(
        null, 
        schema, 
        tableName, 
        columnName); 
     } 
     //   columns = 
     //    getMetaData().getColumns(getMetaDataCatalogName(), getMetaDataSchemaName(), tableName, columnName); 
     if (columns.next()) { 
      datatype = columns.getInt("DATA_TYPE"); 
     } 
    } catch (SQLException ex) { 
     Log.error(
      this, 
      "Error while getting columns information: " + ex.getMessage(), 
      ex); 
     //return false; 
    } catch (DDLCreationException ex) { 
     Log.error(this, ex.getMessage()); 
    } finally { 
     try { 
      if (columns != null) { 
       columns.close(); 
      } 
     } catch (SQLException ex) { 
     Log.error(this, ex.getLocalizedMessage()); 
     } 
    } 

    return datatype; 
} 

我能得到同時在這樣的表中的所有列元數據? 如果是的話,我該怎麼做?

+0

你有沒有嘗試過的一個nswer? –

回答

1

DatabaseMetaData.getColumns(..)到的參數應該是一個LIKE -pattern。所以,如果你想從表中獲取的所有列,你只需要在"%"傳遞給最後一個參數,columnNamePattern

getMetaData().getColumns(null, schema, tableName, "%"); 

有些司機(也)允許null這裏,但不是所有的司機這樣做(在JDBC規範和API文檔並不完全清楚是否是允許或沒有爲此參數)

13

使用jdbc ResultSetMetaData類獲取表列的詳細信息。

ResultSet res=stmt.executeQuery("select * from tableName where 1<0"); 
ResultSetMetaData rsmd=res.getMetaData(); 
rsmd.getColumnType(1); 
rsmd.getColumnLabel(1); 
rsmd.getColumnDisplaySize(1); 
+2

如果查詢返回0行,這將更好。爲了加快速度,你應該真的使用「select * from tableName where 1 = 2」 –

0

看來你正在尋找列的數據類型,然後getColumnTypeName將在一個

 System.out.println(rsMaster.getMetaData().getColumnName(1)); 
     System.out.println(rsMaster.getMetaData().getColumnType(1)); 
     System.out.println(rsMaster.getMetaData().getColumnTypeName(1)); 
     System.out.println(rsMaster.getMetaData().getColumnDisplaySize(1)); 
     System.out.println(rsMaster.getMetaData().getColumnLabel(1));