排除外键包含在JTable中显示ResultSet

时间:2013-09-12 08:52:55

标签: java swing jdbc jtable foreign-keys

我有一个带有默认表模型的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);
                }
            }
      }
}

我现在意识到这是愚蠢的,因为虽然它确实排除了外键,但它仍然被for语句添加到模型中。有没有人知道解决这个问题?

2 个答案:

答案 0 :(得分:2)

不使用DefaultTableModel,而是展开AbstractTableModel,您可以在其中控制getColumnCount()getValueAt()返回的结果。

答案 1 :(得分:0)

这就是我想要的。简单,但它按照我想要的方式工作。

    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);
            }
        }
    }