# getColumnDisplaySize();



## Robt (11. Okt 2005)

Guten Morgen,

ich habe mal eine etwas größeres Problem, zumindestens für mich. Ich habe eine Oracle Datenbank und frage über "getColumnDisplaySize();" quasi die "Spaltenbreite" ab. Wenn ich mir meine Ergebnisse anschaue, kommen zumeist für CHAR-definierte Felder 80 Stellen und für NUMBER-definierte Fehler 21 Stellen, heraus. Dies entspricht aber leider nicht der Definition der Tabelle. Kurios finde ich allerdings, dass ich in MyEclipse über Database Explorer perspective und dann TableInfo die richtigen Werte angezeigt bekomme. Also kann ja eigentlich mit dem JDBC-Treiber nichts sein.

Wenn jemand eine Lösung für das Problem hat oder einen anderen Weg kennt, wie ich die "Spaltenbreite" herausbekommen kann, wäre ich sehr dankbar.

Frohes Schaffen und einen schönen Tag.

Danke und Gruß Robt


----------



## Robt (12. Okt 2005)

Guten Morgen,

da bin ich wieder, anscheinend konnte mir da hier niemand weiterhelfen bzw. niemand wollte  ???:L 

Nur für den, den die Lösung interessiert:

Jetzt wo ich die API fast auswendig kenn, hab ich glatt noch was ganz einfaches gefunden, ist ja meistens so  :?  In der Klasse DatabaseMetaData gibts die Klasse getColumns(). In dem ResultSet hockt dann COLUMN_SIZE drin  :wink:  Warum dieses jetzt das richtige Ergebnis bringt und das andere nicht weiß ich zwar bis heute nicht, aber immerhin läufts.......

Machs gut 
Ciao Robt


----------



## norman (12. Okt 2005)

also ich checks noch nicht so richtig.

rset.getMetaData().getColumnDisplaySize(nummer_der_spalte);

liefert bei mir komische werte.
wie hast du das jetzt genau gemacht?

[added:] ich brauche die länge des längsten eintrages in einer spalte


----------



## Bleiglanz (12. Okt 2005)

>>ich brauche die länge des längsten eintrages in einer spalte

hol in dir mit SELECT MAX(LENGTH(colname))


----------



## norman (12. Okt 2005)

klingt gut.

kann ich übrigens die verbindung zur db irgendwie aufrechterhalten?
habe inzischen recht viele methoden, die jedesmal eine verbindung (neu?) aufbauen -> das kann man doch sicher auch besser lösen?


```
void set_user_tabellen(){
		try {
			Connection con = DriverManager.getConnection(MainClass.url,MainClass.username,MainClass.passwort);    
			Statement stmt = con.createStatement();
		    ResultSet rset = stmt.executeQuery("SELECT table_name FROM user_tables");
		    
		    tabellen_auswahl.add("");
		    
		    while (rset.next()){
		    	tabellen_auswahl.add(rset.getString(1));
		    }
		}
		catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	void set_tabellen_spalten(String tabelle) {
		try {
			Connection con = DriverManager.getConnection(MainClass.url,MainClass.username,MainClass.passwort);    
			Statement stmt = con.createStatement();
		    ResultSet rset = stmt.executeQuery("SELECT * FROM " + tabelle);	    
		    ResultSetMetaData cols = rset.getMetaData();
		    anzahl_der_checkboxen=0;
		    for (int i=1; i <= cols.getColumnCount(); i++) {
		    	JCheckBox checkbox = new JCheckBox(cols.getColumnName(i));
		    	checkboxen.add(checkbox);
		    	
		    	anzahl_der_checkboxen++;
		    	checkboxArray[i]=checkbox; 
		    }
		}
		catch (SQLException e) {
			e.printStackTrace();
		}
	}
```
usw...


----------



## Bleiglanz (12. Okt 2005)

wie wärs mit einer funktion die dir eine neue Connection liefert?

und wo sind die close(); Anweisungen???


----------



## norman (12. Okt 2005)

>> wie wärs mit einer funktion die dir eine neue Connection liefert?
das würde ja aber nichts daran ändern, dass ich mehrfach eine neue verbindung aufbauen muss (und das dauert ja recht lang)

>> und wo sind die close(); Anweisungen???
du meinst Statement.close() oder? habe ich jedenfalls nicht -> wäre offensichtlich sinnvoll?


----------

