Ermitteln der Spaltenbreite => DATE-Spalte hat Länge 8 ?!

Status
Nicht offen für weitere Antworten.

norman

Top Contributor
hallo zusammen,

folgende Methode soll ermitteln, wie breit das längste Element in einer Spalte ist (zum formatieren der Ausgabe):
Code:
	/**
	 * ermittelt die ausgewählten spalten und deren breite
	 * bei spalten die DATE beinhalten ist breite immer 8 ==> BUG  //TODO: DATE-Spalten sind 8 Zeichen breit ?!!?
	 */

/*** ADDED START ***/

/* im Beispiel sind beim Aufruf von get_spaltenbreite(auswahl,tabelle):
 * auswahl: NVL(EMPNO,0),NVL(ENAME,0),NVL(JOB,0),NVL(MGR,0),NVL(HIREDATE,to_date('01 01 0001','mm dd YYYY'))
 * tabelle: EMP
 */

/*** ADDED END ***/

	void get_spaltenbreite(String auswahl, String tabelle) {	
		int z=0;
		String spalte[] = new String[10];	

		for (int a=0;a<auswahl.length()-5;a++) {				// schneidet in auswahl alles vor NVL( ab	
			if (auswahl.substring(a,a+4).equals("NVL(")) {		// evtl. besser: startsWith() verwenden..
				auswahl=auswahl.substring(a+4,auswahl.length());
				a=0; // er muss ja wieder vom anfang von auswahl nach NVL( suchen
				z++;
				spalte[z] = auswahl.substring(0,auswahl.indexOf(","));	// setzt die spalten-namen in spalte[]
			}
		}
		
		for (int i=1;i<=z;i++) {
			try {
				Connection con = DriverManager.getConnection(MainClass.url,MainClass.username,MainClass.passwort);    
				Statement stmt = con.createStatement();
				ResultSet rset = stmt.executeQuery("SELECT MAX(LENGTH(" + spalte[i] + ")) FROM " + tabelle);
				while (rset.next()){
					spaltenbreiten[i] = Integer.parseInt(rset.getString(1)); // spaltenbreiten[] ist eine Klassenvariable
				}
			}
			catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
wie kommentiert enthält es aber den genannten BUG und ich habe keinen blassen warum das so ist.
Folge ist, dass die Ausgabe nicht funktioniert, wenn hinter der DATE-Spalte noch etwas kommt.
In diesem Fall hängt sich das Programm jedenfalls auf (CPU-Last 100%).
hier noch die methode zum ausgeben:
Code:
// Hier wird im JTextField ergFeld die Rückgabe der SQL-Abfrage an den bisherigen Text in ergFeld angehangen

	void abfrage(String auswahl, String tabelle, int spalten){	
	   
		get_spaltenbreite(auswahl,tabelle);
		
		for (int i=1;i<=spalten;i++) {				/**/
			System.out.println(spaltenbreiten[i]);
		}
		
		try {  
			Connection con = DriverManager.getConnection(MainClass.url,MainClass.username,MainClass.passwort);    
			Statement stmt = con.createStatement();
		    ResultSet rset = stmt.executeQuery("SELECT " + auswahl + " FROM " + tabelle);		    
		    
		    while (rset.next()) {		    	
		    	for (int i=1;i<=spalten;i++) {
		    		String 	hilfs = rset.getString(i);
			
		    		if (i!=spalten) /* letzte spalte nicht mit . auffüllen */
	 	    			while (hilfs.length() !=spaltenbreiten[i]+5) /* String solange auffüllen, bis gewünschte Spaltenbreite erreicht */
		    				hilfs = hilfs.concat("."); 								
		    		Grafik.ergFeld.setText(Grafik.ergFeld.getText().concat(hilfs));
		    	}
		    	Grafik.ergFeld.setText(Grafik.ergFeld.getText().concat("\n"));
		    }		    
		    Grafik.ergFeld.setText(Grafik.ergFeld.getText().concat("\n\n"));
		    
		    stmt.close();		    
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
wenn also jemand eine Idee hat, warum es bei DATES nicht funktioniert..?

evtl. liegt es an der .. naja .. seltsam formatierten Ausgabe einer Date-Spalte:

7499.....ALLEN......SALESMAN......7698.....1981-02-20 00:00:00.0

Die ermittelten Spaltenbreiten sind in diesem Fall: 4,6,9,4,8
wobei 8 offensichtlich nicht stimmt, der Rest aber schon.

Vielen Dank für jede Bemühung.

Norman.
 

Bleiglanz

Gesperrter Benutzer
das ist doch kein BUG

bei strings etc. ist das schon klar, aber bei int, float, date usw. sind die von einer DB gelieferten Breiten NICHT die für die Anzeige nötigen Breiten...

mach halt

SELECT MAX(LENGTH(TO_CHAR(<spaltenname>)))

aber in den allermeisten Fällen will man doch eh ncht die Standarddarstellung eines Datums der Datenbank
 

norman

Top Contributor
>> bei strings etc. ist das schon klar, aber bei int, float, date usw. sind die von einer DB gelieferten Breiten NICHT die für die Anzeige nötigen Breiten

sowas in der Richtung habe ich mir gedacht..jedoch nicht an TO_CHAR -> SQL ist nicht direkt mein Ding ;-)
Aber was gibt der Wert dann an? Ich meine, es wird ja nicht aus Willkür gerade eine 8 zurückgegeben

>> aber in den allermeisten Fällen will man doch eh ncht die Standarddarstellung eines Datums der Datenbank

klar..die Uhrzeit hintendran ist bspsweise überflüssig, weil 0...ich wäre nur froh wenn's erstmal akzeptabel läuft, bevor ich evtl das gewünschte DATE-Format berücksichtige.
 

norman

Top Contributor
Bleiglanz hat gesagt.:
...
SELECT MAX(LENGTH(TO_CHAR(<spaltenname>)))

leider führt das zu keiner Veränderung .. die Länge der DATE-Spalte wird nach wie vor mit 8 angegeben :-/

Code:
				ResultSet rset = stmt.executeQuery("SELECT MAX(LENGTH(TO_CHAR(" + spalte[i] + "))) FROM " + tabelle);
				while (rset.next()){
					spaltenbreiten[i] = Integer.parseInt(rset.getString(1)); // spaltenbreiten[] ist eine Klassenvariable
				}
 

norman

Top Contributor
weil ich es eben lieber kompliziert mag? nee..keine ahnung. habe es mal geändert (sieht ja doch irgendwie besser aus, ne?)
[ADDED] .. sowas könnte eclipse doch mal vorschlagen ..

bin mir mit der 8 sicher, ja. die restlichen spaltenbreiten werden ja auch korrekt ermittelt

interessant ist auch, dass das programm abstürzt wenn ich nach der date-spalte noch eine andere ausgeben will (ich glaube weil er ja was anhängen will, wo der string noch garnicht zu ende ist )
AUßER nach einer date-spalte kommt nochmal eine date-spalte .. dann überschreibt der die erste date-spalte mit der zweiten. (oder gibt nur die zweite aus..keine ahnung)

..?
 

norman

Top Contributor
wenn ich die date-spalte normal abfrage - ohne java - wird diese mir im format
20.02.81 (dd.mm.yy)
ausgegeben -> das sind wahrscheinlich diese 8 Zeichen

stellt sich jedoch die frage, wie ich die ausgabe mit java formatiere - und zwar in genau das format, dass die spalte in der tabelle normalerweise hat (java scheint die darstellung ja zu ändern)

die java-applikation gibt ein date so aus:
1981-02-20 00:00:00.0
 

Bleiglanz

Gesperrter Benutzer
SELECT TO_CHAR(datumsspalte)

dann mit getString abholen und du kriegst die "DB"-Darstellung

oder mit getDate abholen und z.B. java.text.SimpleDateFormat zur Ausgabe verwenden...
 

norman

Top Contributor
hmmm. ich schicke ja momentan eine abfrage mit mehren spalten mal date, mal nicht. aus diesem string (zb. "SELECT nvl(ename,0),nvl(number,0),nvl(hiredate,to_date('01 01 0001','mm dd YYYY') FROM emp") suche ich dann die spaltennamen raus, zähle die kommas, suche nach 'to_date' usw. usf.
das ist ziemlich umständlich, wenn ich da noch unterscheiden müsste, bei welcher spalte getString und bei welcher getDate..

kann man das date nicht shcon im sql-befehl formatieren - so ähnlich wie man es bei NVL auch machen muss?
 

Bleiglanz

Gesperrter Benutzer
ja, das ist noch einfacher wenn du so "generisch" arbeiten willst

schau in die Doku zu TO_CHAR, da kannst du gleich ein Datumsformat mit angeben, lass die DB das formattieren übernehmen

auf diese Weise kriegst du ein Resultset, das nur aus Strings besteht und alles ist in Butter
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F wie kann ich die Position des letzten Vokals innerhalb einer Zeichenkette ermitteln? Java Basics - Anfänger-Themen 5
S Bildgröße ermitteln & setSize() übergeben Java Basics - Anfänger-Themen 6
B Anzahl Nullen uns Einsen in String ermitteln Java Basics - Anfänger-Themen 3
R Hangman-Spiel-zufälliges Wort ermitteln Java Basics - Anfänger-Themen 4
H Häufigkeit von Zahlen ermitteln Java Basics - Anfänger-Themen 23
H Palindrom ermitteln Java Basics - Anfänger-Themen 21
J Datum ermitteln ? Java Basics - Anfänger-Themen 14
M Beliebtesten Film ermitteln Java Basics - Anfänger-Themen 6
C Größte Zahl aus einem Array ermitteln(als statische Methode) Java Basics - Anfänger-Themen 31
H Bei forEach Index des Elements ermitteln Java Basics - Anfänger-Themen 17
B DHCP-Server Adresse ermitteln Java Basics - Anfänger-Themen 4
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
J Ein Wort aus einer Datei zufällig ermitteln Java Basics - Anfänger-Themen 3
V Erste Schritte Potenzen b^n mittels Schleife ermitteln Java Basics - Anfänger-Themen 7
B Anzahl von Stunden / Tage von zwei Datumswerten ermitteln Java Basics - Anfänger-Themen 1
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
O 2 Maximalwerte und Minimalwerte aus Array ermitteln Java Basics - Anfänger-Themen 9
L Fortschritt ermitteln Java Basics - Anfänger-Themen 18
N Erste Schritte HSV color space - schwarz und weiß nur anhand von Saturation oder Multiplikator ermitteln Java Basics - Anfänger-Themen 14
N Wahrscheinlichkeiten ermitteln Java Basics - Anfänger-Themen 2
L Objekt Typ zur Laufzeit ermitteln Java Basics - Anfänger-Themen 1
J Schwierigkeitsgrad eines Wortes mit Morsecode ermitteln Java Basics - Anfänger-Themen 18
J Best Practice Datum Differenz aus zwei Strings ermitteln Java Basics - Anfänger-Themen 8
M Erste Schritte primzahlen ermitteln, nur zahlen als eingabe erlauben Java Basics - Anfänger-Themen 34
G Größten und kleinsten Wert im Array ermitteln? Java Basics - Anfänger-Themen 7
G Wie kann ich diesen Wert ermitteln? Java Basics - Anfänger-Themen 4
T Rekursiv Tiefe eines binären Suchbaums ermitteln Java Basics - Anfänger-Themen 22
D Maximale Teilsumme ermitteln Java Basics - Anfänger-Themen 6
MiMa Jüngstes Datum ermitteln Java Basics - Anfänger-Themen 4
S Compiler-Fehler im array Maximum ermitteln Java Basics - Anfänger-Themen 6
V Querprodukt ermitteln Java Basics - Anfänger-Themen 6
L Array: Summe aller geraden und ungeraden Zahlen ermitteln Java Basics - Anfänger-Themen 9
Joew0815 Int to string und primzahle ermitteln Java Basics - Anfänger-Themen 2
F Jalousie Positionen ermitteln Java Basics - Anfänger-Themen 4
C Klassen aus einem Package ermitteln und per Laufzeit laden Java Basics - Anfänger-Themen 17
C Datei mit Daten einlesen und höchsten wert der zweiten Spalte ermitteln Java Basics - Anfänger-Themen 1
L Aus Datum Millisekunden ermitteln ohne Zeitzonen-Berücksichtigung Java Basics - Anfänger-Themen 6
C OOP Schwerpunkt eines Dreiecks ermitteln Java Basics - Anfänger-Themen 4
I Zeitraum eines Monats ermitteln und in String ausgeben Java Basics - Anfänger-Themen 1
S Datentypen Dimensionalität eines Arrays ermitteln Java Basics - Anfänger-Themen 2
V Anzahl von gleichen Werten in einem Int-Array ermitteln Java Basics - Anfänger-Themen 4
D TreeMap: Höheren Key ermitteln und den Value liefern Java Basics - Anfänger-Themen 3
J In einem Array die größte Zahl ermitteln und Faktorisieren. Java Basics - Anfänger-Themen 5
V Array ermitteln - in Quellcode speichern Java Basics - Anfänger-Themen 15
H JEditorPane: ermitteln, ob Zeichen unterstrichen Java Basics - Anfänger-Themen 4
M Monat der letzen 12 Monate ermitteln Java Basics - Anfänger-Themen 8
MiMa String Datum ermitteln Java Basics - Anfänger-Themen 9
H Veränderung eines Objekts ermitteln Java Basics - Anfänger-Themen 6
S Wochentage ermitteln Java Basics - Anfänger-Themen 5
S Ermitteln und Setzen der Attribute eines Objektes Java Basics - Anfänger-Themen 6
F Den Gewinner der Tordifferenz ermitteln Java Basics - Anfänger-Themen 5
J Eltern-Fenster ermitteln Java Basics - Anfänger-Themen 2
S MP3 Spielzeit mit jid3lib ermitteln? Java Basics - Anfänger-Themen 3
M Größer der eigenen .jar ermitteln Java Basics - Anfänger-Themen 4
M Größe einer Datei via. Link ermitteln Java Basics - Anfänger-Themen 9
R Alle Klassen ermitteln, die Interface implementieren / Reflection Java Basics - Anfänger-Themen 51
C Nächsten Montag ermitteln Java Basics - Anfänger-Themen 19
W Position in ArrayList ermitteln Java Basics - Anfänger-Themen 4
B Font Namen ermitteln Java Basics - Anfänger-Themen 7
C least significant bit einer HexMaske für Bitshift ermitteln Java Basics - Anfänger-Themen 2
B Pfad einer .jar im Programm ermitteln Java Basics - Anfänger-Themen 13
H "Index" eines Button ermitteln Java Basics - Anfänger-Themen 7
C Bereits geöffnetes Object ermitteln Java Basics - Anfänger-Themen 5
S ermitteln eines Wertes im StringArray Java Basics - Anfänger-Themen 4
D Ermitteln des kleinsten Messwertes von jedem Tag Java Basics - Anfänger-Themen 15
C Hösten Wert aus mehren Listen ermitteln Java Basics - Anfänger-Themen 2
D Input/Output Pfad richtig ermitteln Java Basics - Anfänger-Themen 12
P Dateigröße von Ordnern ermitteln Java Basics - Anfänger-Themen 8
T Enum - Key als Value ermitteln Java Basics - Anfänger-Themen 7
J den x und y Wert beim klicken der Maus ermitteln Java Basics - Anfänger-Themen 2
M float/double Anzahl Nachkommastellen ermitteln Java Basics - Anfänger-Themen 18
G Sekunden bis zum Ende der aktuellen Kalenderwoche ermitteln! Java Basics - Anfänger-Themen 3
F Substring mittels RegEx ermitteln/ersetzen? Java Basics - Anfänger-Themen 2
M Datentypen Generics: Exacten Typ ermitteln Java Basics - Anfänger-Themen 6
Spin Backgrond Color von Image ermitteln Java Basics - Anfänger-Themen 2
M Größe einer Konsole ermitteln Java Basics - Anfänger-Themen 2
c_sidi90 Größe von Dateien aus File Array ermitteln Java Basics - Anfänger-Themen 12
P Ermitteln aller perfekten Zahlen Java Basics - Anfänger-Themen 12
D Pfad zu "Eigenen Dateien" ermitteln Java Basics - Anfänger-Themen 8
A Relativer Pfad zu einem File ermitteln Java Basics - Anfänger-Themen 2
P Bestimmte Zeilen einer Datei ermitteln ? Java Basics - Anfänger-Themen 30
M Datentypen Wrapperclass eines Primitives ermitteln Java Basics - Anfänger-Themen 4
StrikeTom Shift + pfeiltaste ermitteln Java Basics - Anfänger-Themen 3
H Wie Projekt-Ordner-Pfad ermitteln? Java Basics - Anfänger-Themen 11
A Aktueller Pfad des Programms (.jar) ermitteln Java Basics - Anfänger-Themen 10
P Externe IP ermitteln? Java Basics - Anfänger-Themen 5
J Das Maximum einer Liste ermitteln Java Basics - Anfänger-Themen 8
S Klassennamen ermitteln Java Basics - Anfänger-Themen 10
R Stoppuhr: Zeit ermitteln und übergeben - Variable static?? Java Basics - Anfänger-Themen 6
T PixelFarbe ermitteln und in Fenster zeichnen Java Basics - Anfänger-Themen 12
W Average-Color (Durchschnittsfarbe eines Bildes ermitteln) Java Basics - Anfänger-Themen 16
D Ermitteln der Anzahl gleicher Nachkommastellen 2er Zahlen Java Basics - Anfänger-Themen 9
P Zeilenanzahl einer *.txt ermitteln Java Basics - Anfänger-Themen 6
B Teiler einer Zahl ermitteln Java Basics - Anfänger-Themen 12
H Dimensionen eines 2D-Arrays ermitteln Java Basics - Anfänger-Themen 5
Z Gesperrte JTable auslesen bzw feldposition ermitteln Java Basics - Anfänger-Themen 10
S Anzahl der Wochen eines Monats ermitteln Java Basics - Anfänger-Themen 19
F Hüllklassentyp einer Referenzvar ermitteln? Java Basics - Anfänger-Themen 3
G IP-Adresse ermitteln??? Java Basics - Anfänger-Themen 3
K Dateipfad ermitteln Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben