Attribut-Typ einer leeren Tabelle auslesen

suevas

Grünschnabel
Guten Morgen,

Ich arbeite an einer Applikation, in welcher ich die Attribut-Typen einer Tabelle in MS Access auslesen muss, um einen korrekten SQL-Insert-String zu erstellen. Da die Tabelle jedoch leer ist, crasht mein Programm mit dem folgenden Lösungsansatz. Kennt jemand eine Möglichkeit wie man die Attribut-Typen auslesen kann, ohne dabei auf einen Datensatz zuzugreifen?

Code:
// get attribute types from database
	Statement stmt;
	try {
	    stmt = connect().createStatement();
	    for (Table table : TableFactory.getTables()) {
		ResultSet rs = stmt.executeQuery("select * from " + table.getName());
		while (rs.next()) {
		    for (int i = 0, j = 1; i < rs.getMetaData().getColumnCount(); i++, j++) {
			table.getAttributes().get(i).setType(rs.getMetaData().getColumnType(j));
		    }
		    break;
		}
	    }
	} catch (SQLException e) {
	    throw new InventoryDatabaseException(e);
	}

Vielen Dank für die Hilfe,
suevas
 
Schau dir mal das Interface DatabaseMetaData genauer an. Dort findest du Methoden um alle Infos die du brauchst auszulesen. Über eine Connection kannst du dir ein DatabaseMetadata-Objekt holen ohne Statements auf die Datenbank abzufeuern.
 
Vielen Dank für die Hilfe, ich habe es nun mit dem Interface DatabaseMetaData geschafft...

Hier noch die Lösung:

Code:
// get attribute types from database
    Statement stmt;
    try {
        stmt = connect().createStatement();
        for (Table table : TableFactory.getTables()) {
        ResultSet rs = connect().getMetaData().getColumns(null, null, table.getName(), null);
        int i = 0;
        while (rs.next()) {
            String tableName = rs.getString(3);
            int dataType = rs.getInt(5);
            String columnName = rs.getString(4);
            log.debug("Index: " + i + " " + tableName + " " + dataType + " " + columnName);
            table.getAttributes().get(i).setType(dataType);
            i++;
        }
        }
    } catch (SQLException e) {
        throw new InventoryDatabaseException(e);
    }
 
Zurück