我想通过JDBC根据列名得到这个列的类型,请问有什么方法?目前好像有个方法是根据索引得:ResultSetMetaData.getColumnType(int i)我的程序是,从A表中循环读出所有表名与列名,然后要在B表中根据A表的列名来查看该列的类型.

解决方案 »

  1.   

      用ResultSet.getMetaData()   得到ResultSetMetaData。  
      用ResultSetMetaData.getColumnType()得到一个int,在Types类中找到数据类型。
    分数拿来。
      

  2.   

    至少ResultMetaData不提供楼主需求的方法,所以楼主只能自己做了最容易想到的就是自建一个Map ResultSetMetaData rsData preparedStatement.getMetaData()
     for(int i=0;i<rsData.getColumnCount();i++)
       map.put(rsData.getColumnName(i),rsData.getColumnType(i)); 做在内存中先,然后再怎么操作看你的具体需求了,呵呵,当然也许有更好的方法
      

  3.   

    你用 getColumnCount() 获得表中的总列数,再用 getTableName 获得列的名称
    用 map 保存起来(key 为列名,value 为列号)查找时采用列名查出列号,再用 getColumnTypeName(int column) 查出类型具体的没有试过,只是个想法。
      

  4.   

    嗯,谢谢楼上几位,我也想过这些方法,但总觉得,这样做太浪费资源了,会有很多FOR语句,如果A表里的数据量很大的话,我怕程序跑起来太慢
      

  5.   

    DatabaseMetaData dbmb = con.getMetaData();
    result = dbmb.getColumns(null,null,tbname,column);column是我取出来的列名
    result.getString("DATA_TYPE");打出来看,这个方法取出来是3,不知道这里的3是什么意思
      

  6.   

    java.sql.Types 的常量-1    LONGVARCHAR
    -2    BINARY
    -3    VARBINARY
    -4    LONGVARBINARY
    -5    BIGINT
    -6    TINYINT
    -7    BIT
    0     NULL
    1     CHAR
    2     NUMERIC
    3     DECIMAL
    4     INTEGER
    5     SMALLINT
    6     FLOAT
    7     REAL
    8     DOUBLE
    12    VARCHAR
    16    BOOLEAN
    70    DATALINK
    91    DATE
    92    TIME
    93    TIMESTAMP
    1111  OTHER
    2000  JAVA_OBJECT
    2001  DISTINCT
    2002  STRUCT
    2003  ARRAY
    2004  BLOB
    2005  CLOB
    2006  REF