All pastes #956703 Raw Edit

Unbenannt

public text v1 · immutable
#956703 ·published 2008-03-25 14:36 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 + ";DriverID=22;READONLY=false}", "Admin","");
                 
        }
 
        /**
         * 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(");");
                
                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<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;
                }
        }
}