Java 将外键排除在显示结果集的JTable中

Java 将外键排除在显示结果集的JTable中,java,swing,jdbc,jtable,foreign-keys,Java,Swing,Jdbc,Jtable,Foreign Keys,我有一个带有默认表模型的JTable,我用它来显示结果集。我正在使用postgreSQL。我试图让表排除主键和外键。到目前为止,我已经得到它排除主键,但我一直在排除外键失败 这就是我获取外键的方式: public List<String> getFKeyData(String tableName, int i) throws SQLException { DatabaseMetaData dm = connection.getMetaData(); ResultSet

我有一个带有默认表模型的JTable,我用它来显示结果集。我正在使用postgreSQL。我试图让表排除主键和外键。到目前为止,我已经得到它排除主键,但我一直在排除外键失败

这就是我获取外键的方式:

public List<String> getFKeyData(String tableName, int i) throws SQLException {
    DatabaseMetaData dm = connection.getMetaData();
    ResultSet rs = dm.getImportedKeys(null, null, tableName);
    ArrayList<String> fkTableData = new ArrayList<>();
    while (rs.next()) {
        fkTableData.add(rs.getString(i));
    }
    return fkTableData;
}
int fkSize = databaseConnection.getFKeyData(tableName, 8).size();

for (int i = 0; i <= fkSize - 1; i++) {
    if (databaseConnection.getColumnNames(tableName).indexOf(databaseConnection.getFKeyData(tableName, 8).get(i)) == 1) {
         if (databaseConnection.getColumnNames(tableName).indexOf(databaseConnection.getPKey(tableName)) != 1) {
                if (databaseConnection.getColCount(tableName) >= 1) {
                    model.addColumn(columnNamesV.get(1), cellData1);
                }
            }
      }
}
public List getFKeyData(字符串tableName,int i)抛出SQLException{
DatabaseMetaData dm=connection.getMetaData();
ResultSet rs=dm.getImportedKeys(null,null,tableName);
ArrayList fkTableData=新建ArrayList();
while(rs.next()){
fkTableData.add(rs.getString(i));
}
返回数据;
}
这就是我最初排除外键的想法:

public List<String> getFKeyData(String tableName, int i) throws SQLException {
    DatabaseMetaData dm = connection.getMetaData();
    ResultSet rs = dm.getImportedKeys(null, null, tableName);
    ArrayList<String> fkTableData = new ArrayList<>();
    while (rs.next()) {
        fkTableData.add(rs.getString(i));
    }
    return fkTableData;
}
int fkSize = databaseConnection.getFKeyData(tableName, 8).size();

for (int i = 0; i <= fkSize - 1; i++) {
    if (databaseConnection.getColumnNames(tableName).indexOf(databaseConnection.getFKeyData(tableName, 8).get(i)) == 1) {
         if (databaseConnection.getColumnNames(tableName).indexOf(databaseConnection.getPKey(tableName)) != 1) {
                if (databaseConnection.getColCount(tableName) >= 1) {
                    model.addColumn(columnNamesV.get(1), cellData1);
                }
            }
      }
}
int fkSize=databaseConnection.getFKeyData(tableName,8.size();
对于(int i=0;i=1){
model.addColumn(columnNamesV.get(1),cellData1);
}
}
}
}

我现在意识到这是愚蠢的,因为尽管它确实排除了外键,但它还是通过for语句添加到了模型中。有人知道解决这个问题的方法吗?

用extend代替
DefaultTableModel
,在extend中,你可以控制
getColumnCount()
getValueAt()
返回的结果,这就是我想要的。简单,但它的工作方式,我希望它

    ArrayList fkIndex = new ArrayList();

    for (int i = 0; i <= fkSize - 1; i++){
    fkIndex.add(databaseConnection.getColumnNames(tableName).indexOf(databaseConnection.getFKeyData(tableName, 8).get(i)));
    }

    if (databaseConnection.getColumnNames(tableName).indexOf(
            databaseConnection.getPKey(tableName)) != 1) {
        if (fkIndex.contains(1) == false) {
            if (databaseConnection.getColCount(tableName) >= 1) {
                model.addColumn(columnNamesV.get(1), cellData1);
            }
        }
    }
ArrayList fkIndex=new ArrayList();
对于(int i=0;i=1){
model.addColumn(columnNamesV.get(1),cellData1);
}
}
}

是否有办法将get(i)(即i=1到fkSize)设置为一个范围而不是i,这取决于
表格模型的内部结构
,谢谢你的帮助。我相信你的方法很好,但我对抽象表模型一无所知,我不想在这个程序中与它们混在一起,因为它即将完成。如果你继续使用
DefaultTableModel
,你可以更新列名,如图所示。