在远程访问数据库时(Oracle),
查询的列名为什么有重复的????
String selsql="select TNAME from tab where (TNAME like 'T%' or TNAME like 'C%') and " +
"substr(TNAME,length(TNAME),1) not in ('0','1','2','3','4','5','6','7','8','9')";

try{
con = getConnection();
Statement ps = con.createStatement();
ResultSet rs = ps.executeQuery(selsql);
Map map = new HashMap();
while(rs.next()){
String tablename = rs.getString("TNAME");
DatabaseMetaData meta = con.getMetaData();
ResultSet rss = meta.getColumns(null, null, tablename, null);
List<String> columns = new ArrayList<String>();
System.out.println("tablename: " + tablename);
while(rss.next()){
columns.add(rss.getString("COLUMN_NAME"));
System.out.print(rss.getString("COLUMN_NAME"));
System.out.print("【】");
}
System.out.println();
map.put(tablename, columns);
}

解决方案 »

  1.   

    tablename: TEST
    MC【】ID【】NAME【】
    tablename: TMP_BONDDT
    BNAME【】ABNAME【】BONDDT5【】BONDDT15【】BONDDT19【】BONDDT20【】BONDDT47【】JYSC【】SRC_CD【】
    tablename: T_JJ_BASIC
    F_ID【】F_DATE【】F_NAME【】F_JJQC【】F_QSRQ【】F_ZZRQ【】F_JJFQR【】F_JLJG【】F_GLJGID【】F_TGJG【】F_TGJGID【】F_JLXM【】F_ZFE【】F_LTFE【】F_TYPE1【】F_JJ_TYPE【】F_SLRQ【】F_JJNX【】F_SCFXSJ【】F_FXJ【】F_MJZJ【】F_FXFS【】F_FQRRGDW【】F_FXXTR【】F_KJSSWS【】F_LSSWS【】F_SSDD【】F_SSRQ【】F_SGSHDD【】F_GLFL【】F_TGFL【】F_RGFYL【】F_SGFYL【】F_SHFYL【】F_REMARK【】F_UPDATE_TIME【】
    tablename: T_STOCK_INDEX
    F_ID【】F_NAME【】F_GSID【】F_TYPE【】F_JYS【】F_STATUS【】F_UPDATE_TIME【】F_PY【】SRC_CD【】
    tablename: T_S_PD_INVEST_PROD_NO
    INVT_PROD_ID【】INVT_PROD_NO【】INVT_PROD_ABBR【】TX_MKT_CD【】INVT_PROD_ID【】INVT_PROD_NO【】INVT_PROD_ABBR【】TX_MKT_CD【】
    tablename: T_S_PD_THD_PTY
    THD_PTY_ID【】THD_PTY_NO【】THD_PTY_NM【】PTY_TP_CD【】COUNTRY【】LGL_RPT【】FAX_NO【】TEL_NO【】EMAIL_ADDR【】THD_PTY_ID【】THD_PTY_NO【】THD_PTY_NM【】
    tablename: CHANGEKMBAK
    FACCTCODEOLD【】FACCTCODE【】ASST_ID【】
    tablename: C_ASST_TP
    ASST_TP_CD【】ASST_TP_NM【】ASST_TP_CD【】ASST_TP_NM【】
    tablename: C_BIZ_TP
    BIZ_TP_CD【】BIZ_TP_DESC【】BIZ_TP_CD【】BIZ_TP_DESC【】BIZ_TP_CD【】BIZ_TP_DESC【】
    tablename: C_FUND_INVT_TP
    FUND_INVT_TP_CD【】FUND_INVT_TP_NM【】FUND_INVT_TP_CD【】FUND_INVT_TP_NM【】FUND_INVT_TP_CD【】FUND_INVT_TP_NM【】
    tablename: C_FUND_ORG_FRM
    FUND_ORG_FRM_CD【】FUND_ORG_FRM_NM【】FUND_ORG_FRM_CD【】FUND_ORG_FRM_NM【】
    tablename: C_FUND_TP
    FUND_TP_CD【】FUND_TP_NM【】FUND_TP_CD【】FUND_TP_NM【】FUND_TP_CD【】FUND_TP_NM【】
    tablename: C_RAT_SRC_TP
    RAT_SRC_TP_CD【】RAT_SRC_TP_DESC【】RAT_SRC_TP_CD【】RAT_SRC_TP_DESC【】RAT_SRC_TP_CD【】RAT_SRC_TP_DESC【】
    tablename: C_TX_MKT
    TX_MKT_CD【】TX_MKT_NM【】TX_MKT_CD【】TX_MKT_NM【】TX_MKT_CD【】TX_MKT_NM【】
    tablename: CsChangeKmh
    COL001【】
    远程查询的结果有对的有重复的
      

  2.   

    首先不建议使用tab表来查迅,因为tab是为了向后兼容而保留下来的数据字典表(版本 5)结果错误,应该是程序代码的错误。
      

  3.   

    但是换成user_tables查询,结果也是一样的,有重复
      

  4.   

    我认为数据字典是否存在错误,最简单的验证就是在sqlplus中desc一下。
    总得来说,应该是你的代码写的有问题。
      

  5.   

    也不知道在取数据时哪个地址出错了但也可以用其他的方法解决:把每次取出的列值放到集合里,然后用集合自带的contains方法判断下次取出的值是否以在集合中存在