2013-08-04 2 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

вы пробовали A 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, где 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)); 
Смежные вопросы