rendered paste bodyimport 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;
}
}
}