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 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(); 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 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 + ";DriverID=22;READONLY=false}", "Admin",""); } /** * SQL-Statement zusammenbauen und absetzen * * @param list * @throws Exception */ private void executeInsert(ArrayList 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(");"); String sql = sb.toString(); sql=sql.replaceAll("\"", "'"); System.out.println(sql); Statement stmt = con.createStatement(); stmt.executeUpdate(sql); 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 getArrayList() throws Exception { ArrayList list = new ArrayList(); 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; } } }