1

結果セットを表示するために使用しているデフォルトのテーブルモデルを持つ 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 ステートメントによってモデルに追加されるため、これはばかげていることがわかりました。誰もこれを回避する方法を知っていますか?

4

2 に答える 2

2

を使用する代わりにDefaultTableModel、extendを使用すると、およびAbstractTableModelによって返される結果を制御できます。getColumnCount()getValueAt()

于 2013-09-12T10:09:50.987 に答える
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);
            }
        }
    }
于 2013-09-16T10:36:37.113 に答える