Abfragen in einer Access DB

Saban

Erfahrenes Mitglied
Hallo Zusammen!

ich habe in meiner Connection eine Methode mit der ich eine Abfrage durchführe, wo das dann in einer JTable dargestellt wird.
Dafür habe ich ein 2 Dim Array bei der ich einmal die String[Zeilen][Spalten] speichere. Das Problem jetzt ist jedoch das ich nie weiss wie viele Zeilen ich habe. Ich würde die Tabelle gern mit dem letzten Datensatz abschliessen. Dazu muss ich halt immer erst den SQL ausführen die Zeilen ermitteln und anschliessend nochmal ausführen und die Results in dem nun deklarierten Array zu speichern.

Das geht halt ziemlich auf die Performance. Kann mir jemand vllt nen Tip für ne bessere Lösung geben? :confused: Die Access Datenbank wird später mal durch eine Oracle DB ausgetauscht.

MfG
Saban
 
Hi Saban,

das könntest Du mit einer ArrayListe in etwa so machen, da Du eine feste Spaltenanzahl hast.


Java:
public static void main(String[] args) {
		List<String> table = new ArrayList<String>();
		
		
		// Beispieldaten
		int zeilen = 2;
		int spalten = 10;
		for(int x=0; x<zeilen; x++)
			for(int y=0; y<spalten; y++)
				table.add(x + ":" +y);
		
		
		int zeile = 0;
		int spalte = 2;
		String val = table.get(zeile * spalten + spalte);
		System.out.println(val);
		
	}

Gruß
joschi
 
Hi

danke erst mal für deine schnelle Antwort!

Java:
sql = 	" SELECT 	*" +
		" FROM 		tabelle1 AS ST, tabelle2 AS WNR" +
		" WHERE 	ST.werknummer = WNR.werknummer" +
		" AND		ST.werknummer IN (" + wnr + ")" +
		" AND 		kst_belast IN (" + kst + ")" +
		" AND		mzg IN (" + mzg + ")" +
		" AND	 	Datum >= dateValue('" + von + "')" +
		" AND		Datum <= dateValue('" + bis + "')" +
		" ORDER BY 	tnr, mzg, kst_belast, datum";
		
//anzahl ist das Ergebnis einer Count Abfrage welche ich hier jetzt weg lasse
		String tabDaten[][] = new String[anzahl][COLUMNNAMES.length];
		
		resultSet = stmt.executeQuery(sql);
		
		int zaehler = -1;
		while(resultSet.next()){
			++zaehler;
			
			tabDaten[zaehler][0] = ändereDatum(String.valueOf(resultSet.getDate("Datum")));
			tabDaten[zaehler][1] = resultSet.getString("Werknummer") + " - " + resultSet.getString("MontageWnr");
			tabDaten[zaehler][2] = resultSet.getString("TNR");
			tabDaten[zaehler][3] = resultSet.getString("MZG");
			tabDaten[zaehler][4] = resultSet.getString("KST_Belast");
			tabDaten[zaehler][5] = resultSet.getString("GSTD");
			tabDaten[zaehler][6] = resultSet.getString("Beschreibung");
			tabDaten[zaehler][7] = resultSet.getString("Baugruppe");
		}

ich weiss grad nicht wie ich dein beispiel auf meins übertragen soll :confused:

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Hi Saban,

konnte das nicht testen, da ich keine DB habe.
Hoffe das stimmt einigermaßen und Du verstehst was ich meine.

Java:
resultSet = stmt.executeQuery(sql);
    		
    		List<String> data = new ArrayList<String>();
    		
    		while(resultSet.next()){
    			data.add(ändereDatum(String.valueOf(resultSet.getDate("Datum"))));
    			data.add(resultSet.getString("Werknummer") + " - " + resultSet.getString("MontageWnr"));
    			data.add(resultSet.getString("TNR"));
    			data.add(resultSet.getString("MZG"));
    			// etc.....
    		}
    		
    		// Auslesen
    		int zeilen = data.size() / COLUMNNAMES.length;
    		for(int zeile=0; zeile < zeilen; zeile++) {
    			for(int spalte=0; spalte<COLUMNNAMES.length; spalte++) {
    				 String val = data.get(zeile * COLUMNNAMES.length + spalte);
    			}
    		}

Gruß
joschi
 
Also ich habs jetzt mal so probiert!

Java:
		while(resultSet.next()){			
			ändereDatum(String.valueOf(resultSet.getDate("Datum")));
			str_liste.add(resultSet.getString("Werknummer") + " - " + resultSet.getString("MontageWnr"));
			str_liste.add(resultSet.getString("TNR"));
			str_liste.add(resultSet.getString("MZG"));
			str_liste.add(resultSet.getString("KST_Belast"));
			str_liste.add(resultSet.getString("GSTD"));
			str_liste.add(resultSet.getString("Beschreibung"));
			str_liste.add(resultSet.getString("Baugruppe"));
		}
		
		String tabDaten[][] = new String[str_liste.size()/COLUMNNAMES.length][COLUMNNAMES.length];
		
		for(int zeile = 0; zeile < str_liste.size()/COLUMNNAMES.length; zeile++){
			for(int spalte = 0; spalte < COLUMNNAMES.length; spalte++) {
				tabDaten[zeile][spalte] = str_liste.get(zeile * COLUMNNAMES.length + spalte); 
			}
		}
weil ich meiner Table n 2 Dim Array übergeben muss. Das Problem ist nur die Anordnung der Ausgabe ich komm da garnicht mehr mit :confused:

Also das Datum kommt nicht mehr untereinander sondern einfach alles kreuz und quer...

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Hi Saban,

sollte so funktionieren wie beschrieben, hab's gerade noch einmal probiert.

Java:
       public static void main(String[] args) {
        	String[] COLUMNNAMES = { "col1", "col2", "col3" };

        	ArrayList<String> str_liste = new ArrayList<String>();

        	// Beispieldaten
        	str_liste.add("0:0");
        	str_liste.add("0:1");
        	str_liste.add("0:2");
        	str_liste.add("1:0");
        	str_liste.add("1:1");
        	str_liste.add("1:2");
        	str_liste.add("2:0");
        	str_liste.add("2:1");
        	str_liste.add("2:2");


        	String tabDaten[][] = new String[str_liste.size()/COLUMNNAMES.length][COLUMNNAMES.length];

    		for(int zeile = 0; zeile < str_liste.size()/COLUMNNAMES.length; zeile++){
    			for(int spalte = 0; spalte < COLUMNNAMES.length; spalte++) {
    				tabDaten[zeile][spalte] = str_liste.get(zeile * COLUMNNAMES.length + spalte);
    			}
    		}

    		for(int zeile = 0; zeile < str_liste.size()/COLUMNNAMES.length; zeile++){
    			for(int spalte = 0; spalte < COLUMNNAMES.length; spalte++) {
    				System.out.print("[" + tabDaten[zeile][spalte] + "]");
    			}
    			System.out.println();
    		}

        }

Natürlich hab ich Deine Daten nicht, aber das sollte unabhängig davon sein.

Gruß
joschi
 
Hi Saban,

hab mir gerade Deinen ursprünglichen Code nochmal angeschaut, da hast Du ein

Java:
tabDaten[zaehler][0] = ändereDatum(String.valueOf(resultSet.getDate("Datum")));

gamacht.

In Deinem neuen Code hast Du anscheinend das add() vergessen.

Java:
str_liste.add(ändereDatum(String.valueOf(resultSet.getDate("Datum"))));

Gruß
joschi
 
Boah du bist der größte!
Danke für deine super Hilfe endlich ist das Problem gelöst vielen vielen Dank!

MfG
Saban
 

Neue Beiträge

Zurück