All pastes #940958 Raw Edit

Unbenannt

public text v1 · immutable
·published 2008-03-13 12:45 UTC
rendered paste body
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.StringTokenizer;

/**
 * Diese Klasse lädt den CSV-Inhalt in die Accessdb via SQL.
 * 
 */
public class UpdateKundenwunsch {
	private Connection con;
	private BufferedReader br;
	private static final ArrayList<String> SPALTEN_NAMEN;

	// TODO pfad zur mdb datei (mit / anstatt von \
	private static final String ACCESS_PFAD = "C:/Programme/Siemens/WinCC/Projekte/Staack080108/Archivierung/Staack.mdb";
	// TODO pfad zur csv datei (mit / anstatt von \
	private static final String DATEI_PFAD = "C:/Programme/Siemens/WinCC/Projekte/Staack080108/ua/Staack.csv";
	// TODO tabellenname
	private static final String TABELLEN_NAME = "Staack_Archiv";

	// TODO simulation: true oder false
	private static final boolean SIMULATION = false;

	static {
		// / TODO anpassen!!! muss die gleiche reihenfolge haben wie die felder
		// in der csvdatei geliefert werden!!!
		SPALTEN_NAMEN = new ArrayList<String>();
		SPALTEN_NAMEN.add("laufende_Nummer");
		SPALTEN_NAMEN.add("Auftragsnummer");
		SPALTEN_NAMEN.add("Kunde");
		SPALTEN_NAMEN.add("Ladung");
	}

	public static void main(String[] args) throws Exception {

		new UpdateKundenwunsch().start();

	}

	public void start() throws Exception {

		try {
			openFile();
		} catch (Exception e) {
			throw e;
		}

		try {
			openSql();
		} catch (Exception e) {
			closeFile();
			throw e;
		}
		//String zeile = leseZeile();

		String zeile;

		boolean first = true;
		while ((zeile = br.readLine()) != null) {

			if (!first) {
			ArrayList<String> list = new MyTokenizer(zeile, ";", SPALTEN_NAMEN
					.size()).getArrayList();

			executeInsert(list);
			System.out.println("verarbeitet");
			}
			first = false;
		}

		closeFile();

		closeSql();

	}

	private void openFile() throws Exception {
		File eingabedatei;
		FileReader fr;

		try {
			eingabedatei = new File(DATEI_PFAD);
			fr = new FileReader(eingabedatei);
			br = new BufferedReader(fr);
			System.out.println(eingabedatei.canRead());

		} catch (FileNotFoundException fnfe) {
			System.out.println("Dateipfad stimmt nicht. Dateipfad:  "
					+ DATEI_PFAD);
			throw fnfe;
		}

	}

	private void closeFile() throws Exception {
		br.close();
	}


	private void openSql() throws ClassNotFoundException, SQLException {

		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

		con = DriverManager.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" + ACCESS_PFAD);

	}

	/**
	 * SQL-Statement zusammenbauen und absetzen
	 * 
	 * @param list
	 * @throws Exception
	 */
	private void executeInsert(ArrayList<String> list) throws Exception {
		StringBuilder sb = new StringBuilder("INSERT into ");
		sb.append(TABELLEN_NAME);
		sb.append(" (");

		boolean first =true;
		for (int i = 0; i < SPALTEN_NAMEN.size(); i++) {
			if (!first) {
				sb.append(", ");
			}
			first=false;
			sb.append(SPALTEN_NAMEN.get(i));
			
		}

		sb.append(") VALUES (");

		first=true;
		for (int j = 0; j < list.size(); j++) {
			if (!first) {
				sb.append(" , ");
			}
			first=false;
			//sb.append("'");
			sb.append(list.get(j));
			//sb.append("'");
		}
		sb.append(");");

		    System.out.println(sb.toString());
		
		    Statement stmt = con.createStatement();

			stmt.executeUpdate((sb.toString()));
			stmt.close();
		}
	

	/**
	 * SQL-Verbindung schlieÃYen
	 * 
	 * @throws Exception
	 */
	private void closeSql() throws Exception {

		con.close();
	}

	// diese Klasse kümmert sich um das Zerlegen der Eingabezeile
	class MyTokenizer {
		private StringTokenizer tokenizer;
		private int anzahl;
		private String trennzeichen;

		public MyTokenizer(String zeile, String trennzeichen, int anzahl) {
			tokenizer = new StringTokenizer(zeile, trennzeichen, true);
			this.anzahl = anzahl;
			this.trennzeichen = trennzeichen;
		}

		public ArrayList<String> getArrayList() throws Exception {
			ArrayList<String> list = new ArrayList<String>();
			for (int i = 0; i < anzahl; i++) {
				String t1;
				t1 = tokenizer.nextToken();
				if (t1.equals(trennzeichen)) {
					throw new Exception(
							"Es existieren in der CSV-Datei zwei aufeinanderfolgende "
									+ trennzeichen);
				}
				list.add(t1);
			
				// nächstes Trennzeichen überlesen, auÃYer beim letzten, da gibts
				// keins mehr
				if (i != anzahl - 1) {
					tokenizer.nextToken();
				}
			}
			return list;
		}
	}
}