# Anzahl der Spalten eines ResultSets bestimmen



## WurstBrot (25. Jun 2007)

Hallo,
ich bin noch relativ neu in der ganzen Materie und habe ein Problem.
Um mit einer DB auf einem MS SQL Server zu verbinden habe ich folgende Klasse:


```
public class DBConnector {
	
	public void processQuery(String query) {
		//Kreire Variable fuer ConnectionString
		String connectionUrl = "jdbc:sqlserver://localhost\\sqlexpress;" +
			"databaseName=spektrenalt;user=sa;password=root";
		
		//Deklaration JDBC Objekte
		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;
		try {
			//Verbindungsaufbau
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			con = DriverManager.getConnection(connectionUrl);
			
			//Erstelle und führe aus SQL Statement
			String SQL = query;
			stmt = con.createStatement();
			rs = stmt.executeQuery(SQL);
						
			//Iteriere durch ResultSet und stelle es dar
			while (rs.next()) {
				System.out.print(rs.getString(1));			
			}
		}
		
		//Fehlerbehandlung
		catch (Exception e) {
			e.printStackTrace();	
		}
		finally {
			if (rs != null) try { rs.close(); } catch (Exception e) {}
			if (stmt != null) try { stmt.close(); } catch (Exception e) {}
			if (con != null) try { con.close(); } catch (Exception e) {}
		}
	}

}
```
Ich gebe meien ResultSet mit rs.getString(1) aus.
Nun interessiert mich, ob es eine Möglichkeit gibt, den maximalen Spaltenindex des ResultSets zu ermitteln, um eventuell über eine for-Schleife eine Ausgabe zu generieren,für die der Übergabewert von getString() von 1 bis maxSpaltenIndex läuft.

Soweit erstmal vielen Dank


----------



## Rydl (25. Jun 2007)

also mir fällt grad kein beispiel ein, in dem man die spaltenanzahl eines resulsets nicht kennt, aber ich versteh was du meinst und ich glaub das geht nicht  du musst wohl oder übel deine spalten beim namen nennen, so viele werden es ja wohl nicht sein..


----------



## HoaX (25. Jun 2007)

javadoc von ResultSet hat gesagt.:
			
		

> The number, types and properties of a ResultSet  object's columns are provided by the ResulSetMetaData  object returned by the ResultSet.getMetaData method.


noch fragen, kienzle?


----------



## robertpic71 (26. Jun 2007)

Ich kann sogar einen Beispielcode anbieten:


```
// Pseudo-SQL absetzen, Metadaten auslesen
ResultSet rs = stmt.executeQuery ("select * from " + dbFileName
                 + " where 'Y' = 'X'");

ResultSetMetaData meta   = rs.getMetaData();
anzFields = meta.getColumnCount();

// Tabellen für Metadaten + Daten anlegen
fieldName = new String[anzFields];
...
```

Meine Anwendung: Ein XML-Mapper der eine XML-Datei in die Datenbank schreibt/mappt. Dabei werden nur gleichnamige Felder (XML-Itemname = FeldName, XML-Knotenname = Datei) gemappt. 

Diese Funktion hat jetzt schon einige EDIFACT-Mapping-Änderungen (Ausgabe XML-Datei) mitgemacht, ohne das ich das was nachbessern musste. 

/Robert


----------



## ARadauer (26. Jun 2007)

@Rydl: ein beispiel, ist zb wenn du auf eine fremde datenbank, bzw undokumentierte datenbank zugreiffen musst


----------



## WurstBrot (26. Jun 2007)

Danke Leute.
Das war genau was ich suchte.
 :applaus:
So, und wie setz ich jetzt den "Frage beantwortet Haken"  :autsch:


----------

