# Daten aus einer Tabelle (z.b. excel) laden



## jorgeHX (23. Februar 2007)

Hallo Leute,
ich bräuchte mal Rat oder einen Vorschlag, wie ich am effektivsten Daten aus einer (Excel-)Tabelle laden kann.

Ich hab quasi in der ersten Spalte deutsche und in der zweiten Spalte englische Begriffe, die während der Laufzeit ausgelesen werden sollen, da dann z.B. der Button "Weiter" mit dem entsprechenden Begriff belegt werden soll.

Kann mir da jemand helfen? Gibt es dazu Beispiele? Wichtig ist eben auch, dass die Performance stimmt.

Schon jetzt einmal vielen Dank,
JP


----------



## BLOEBAUM (23. Februar 2007)

Hallo JorgeHX,

ich habe in dem folgenden Programm EXCEL Daten aus einer CSV Datei gelesen und in Blöcken zu je iMaxSätzeAufEinmal  Sätzen in der Datenbank gespeichert.
Den Parameter kannst du ja ändern. Ich habe mit 125 auch von der Performance gute Erfahrungen gemacht.
Der Soucecode lässt an Eleganz zu wünschen übrig, dafür ist TOM zuständig,
aber bei ffunktioniert die Variante.

Gruß

Harald

import java.awt.Component;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

public class AusgabenLadenEinSchritt {

	public static final int iMaxSätzeAufEinmal = 125; // 750;

	public static String sDateiname = GlobaleDaten.sDasiAusgaben;

// Pro Feld eine ArrayList definieren, weil diese Listen
// zur Laufzeit wachsen können (ein normales Array nicht)
// Wenn alle Daten gelesen sind, werden die Daten aus den Array Listen
// in ein Array kopiert
	public static ArrayList aListKey = new ArrayList(1000);
	public static ArrayList aListBudat = new ArrayList(1000);
	public static ArrayList aListWgrnr = new ArrayList(1000);
	public static ArrayList aListBetrag = new ArrayList(1000);
	public static ArrayList aListText = new ArrayList(1000);
	public static ArrayList aListDatanl = new ArrayList(1000);
	public static ArrayList aListDataend = new ArrayList(1000);
	public static String[][] sAusgabenTabelle = null;
	public int iZähler = 0;
	public static int iLeereElemente = 0;

	public static void main(String[] args) {
		System.out.println("Start Programm AusgabenLadenEinSchritt");

// String sAusgabe = null;
// int iAnzFehler = 0;

		int iAnzInsert = 0;
		{
			try {
				// Ausgabedatei auf dem PC suchen
				// Datei zuweisen
				System.out.println("Einlesen Datei: " + sDateiname);
				FileReader fr = new FileReader(sDateiname);
				BufferedReader br = new BufferedReader(fr);
				// Feld für Eingabe definieren und ersten Satz einlesen

				int iZähler = 0;
				String sKeyAusgaben = null;
				String sBudat = null;
				String sWgrnr = null;
				String sBetrag = null;
				String sText = null;
				String sDatanl = null;
				String sDataend = null;
				Datumsroutinen daru = new Datumsroutinen();

				String[] sErgebnis = null; // für den Split Befehl
				String sSatz = br.readLine();

				while (sSatz != null) {
					iZähler++;

					sErgebnis = sSatz.split(";");
					if (sErgebnis.length == 0) {
						iLeereElemente++;
					} else {

						sKeyAusgaben = sErgebnis[0];
						sBudat = sErgebnis[1];
						sWgrnr = sErgebnis[2];
						sBetrag = sErgebnis[3].replaceFirst(",", ".");
						sText = sErgebnis[4];
						sDatanl = sErgebnis[5];
						sDataend = sErgebnis[6];

// Datumsfelder vom Format 17.01.2005 in 2005-01-17 umwandeln
						try {
// Nur umwandeln, wenn ein Punkt vorkommt, sonst
// wird in der
// Datenbank 000-00-00 eingetragen
// Umwandeln, wenn an Stelle 3 und 6 ein Punkt steht
// dann ist das Format 21.03.1959
	if (sBudat.indexOf(".", sBudat.indexOf(".") + 1) == 5) {
		sBudat = daru.datumPunktnachStrich(sBudat);
							}
			if (sDatanl.indexOf(".", sDatanl.indexOf(".") + 1) == 5) {
								sDatanl = daru.datumPunktnachStrich(sDatanl);
							}
							if (sDataend
									.indexOf(".", sDataend.indexOf(".") + 1) == 5) {
								sDataend = daru.datumPunktnachStrich(sDataend);
							}

						} catch (Exception ex) {

							System.out.println("Fehler bei daru umwandeln: "
									+ sBudat);
							ex.printStackTrace();
						}

						// Daten in ArrayListen sammeln
						// Grund: ArrayListen können dynamisch wachsen

						aListKey.add(sKeyAusgaben);
						aListBudat.add(sBudat);
						aListWgrnr.add(sWgrnr);
						aListBetrag.add(sBetrag);
						aListText.add(sText);
						aListDatanl.add(sDatanl);
						aListDataend.add(sDataend);

						iAnzInsert++;
					}

					sSatz = br.readLine();
				}
				br.close();

			} catch (FileNotFoundException e) // Datei gibt’s nich’
			{
				System.err.println("Datei gibt’s nicht!");
			} catch (IOException e) // Schreib- Leseprobleme
			{
				System.err.println("Schreib- Leseprobleme!");
			}
		}

		// Ausgabedaten aus ArrayListen in ein Array kopieren

		sAusgabenTabelle = new String[iMaxSätzeAufEinmal][7];
		int jZähler = 0; // Satz innerhalb der ArrayListen
		@SuppressWarnings("unused") boolean bWeiter = true;
		int iDurchlauf = 0;
		int iElement = 0;

		int iVglEle = 0;
		int iSQLAngelegt = 0;

		while (jZähler < aListKey.size()) {
			if (iDurchlauf == 0) {
				iElement = jZähler;
			} else {
				iElement = jZähler - (iMaxSätzeAufEinmal * iDurchlauf);
			}

//			System.out.println("iDurchlauf: " + iDurchlauf + " iElemente: "
//					+ iElement + " jZähler: " + jZähler);

			sAusgabenTabelle[iElement][0] = (String) aListKey.get(jZähler);     // sKeyAusgaben
			sAusgabenTabelle[iElement][1] = (String) aListBudat.get(jZähler);   // sBudat
			sAusgabenTabelle[iElement][2] = (String) aListWgrnr.get(jZähler);   // sWgrnr
			sAusgabenTabelle[iElement][3] = (String) aListBetrag.get(jZähler);  // sBetrag
			sAusgabenTabelle[iElement][4] = (String) aListText.get(jZähler);    // sText
			sAusgabenTabelle[iElement][5] = (String) aListDatanl.get(jZähler);  // sDatanl
			sAusgabenTabelle[iElement][6] = (String) aListDataend.get(jZähler); // sDataend

			jZähler++;

			iVglEle = iElement + 1;

			if (iVglEle >= iMaxSätzeAufEinmal) {
// Insert in der Datenbank durchführen
				iDurchlauf++; // nächste Durchlauf nach dem Insert

				try {
					iSQLAngelegt = iSQLAngelegt
							+ DatenbankAufrufe.getInstance()
									.InsertAusgabenTabelle(sAusgabenTabelle);

					} catch (Exception e1) {

					e1.printStackTrace();
					System.out.println("Fehler Ausgaben laden");
					JOptionPane.showMessageDialog(getParent(),
							"Error Datenbank Ausgaben laden");

					// Verarbeitete Tabelle inhaltlich löschen
					// Array Tabelle inhaltlich löschen Start
					int z = 0;
					while (z < iMaxSätzeAufEinmal) {
						sAusgabenTabelle[z][0] = null;
						sAusgabenTabelle[z][1] = null;
						sAusgabenTabelle[z][2] = null;
						sAusgabenTabelle[z][3] = null;
						sAusgabenTabelle[z][4] = null;
						sAusgabenTabelle[z][5] = null;
						sAusgabenTabelle[z][6] = null;
						z++;
					}
				}

				// Ein Paket wurde erfolgreich in die Datenbank eingefügt
				// Array Tabelle inhaltlich löschen Start
				int z = 0;
				while (z < iMaxSätzeAufEinmal) {
					sAusgabenTabelle[z][0] = null;
					sAusgabenTabelle[z][1] = null;
					sAusgabenTabelle[z][2] = null;
					sAusgabenTabelle[z][3] = null;
					sAusgabenTabelle[z][4] = null;
					sAusgabenTabelle[z][5] = null;
					sAusgabenTabelle[z][6] = null;
					z++;
				}
				// Array Tabelle inhaltlich löschen Ende

			}
		}

		// Anzahl der Sätze aus der Datei nicht durch iMaxSätzeAufEinmal
		// teilbar.
		// Hier werden die restlichen in die Datenbank gebracht.
		if (sAusgabenTabelle.length > 0) {
			try {

				iSQLAngelegt = iSQLAngelegt
						+ DatenbankAufrufe.getInstance().InsertAusgabenTabelle(
								sAusgabenTabelle);

//				System.out.println("Insgesamt geladen      " + iSQLAngelegt);
//				System.out.println("Sätze gesamt Datei     " + aListKey.size());

			} catch (Exception e1) {
				// TODO Automatisch erstellter Catch-Block
				e1.printStackTrace();
				System.out.println("Fehler Ausgaben laden");
				JOptionPane.showMessageDialog(getParent(),
						"Error Datenbank Ausgaben laden");

			}

			String sMeldung = "Eingabedatei_____________ " +sDateiname
					        + "\n Sätze mit Inhalt___________ " + aListKey.size()
					        + "\n Leere Sätze_____________ " +iLeereElemente++
		        			+ "\n Sätze auf einmal laden_____ " +iMaxSätzeAufEinmal  
					        + "\n In der Datenbank angelegt__ " + iSQLAngelegt;

			JOptionPane.showMessageDialog(getParent(), sMeldung);

		}
	}

	private static Component getParent() {
		// TODO Automatisch erstellter Methoden-Stub
		return null;
	}
}


----------



## mrno (23. Februar 2007)

Wenn es Performant sein soll, wieso benutzt du dann keine Datenbank?
Bei vielen einträgen ist das immer noch am schnellsten.


----------



## jorgeHX (23. Februar 2007)

Danke euch beiden.

Mit der DB haste natürlich recht. Manchmal sieht den Wald vor lauter Bäumen nicht, haha


----------

