Hallo liebes Forum,
ich habe mal eine Frage ich importiere von 20 - 60 verschiedenen Exceldatein Daten (im Durchschnitt ca. 4500
Zeilen pro Datei)
Mir fällt auf, dass mein Programm alle Daten richtig ließt aber beim schreiben in die DB Daten verloren gehen.
Nun wollte ich euch fragen ob ihr eine Idee habt wie man dies umgehen kann da ich immer das Gefühl habe wenn ich debugge (und somit alles künstlich verlangsamt wird) werden alle Daten pro Datei korrekt importiert.
Nun wollte ich wissen wie ich mein Programm so ändern muss das es eben alle Daten richtig inserted.
Dazu folgende Idee: eine künstliche Pause nach x inserts. (Ich habs mit Thread.Sleep(2000) versucht, aber irgendwie liegt das ganze Programm dann still und zwar länger wie 2 Millisekunden. Und will einfach nix mehr machen.
Generell bin ich immer dankbar für Verbesserungsvorschläge falls euch irgendwas nicht gefällt in den Klassen.
Abfolge meines Programmes:
1.alle daten aus aktuellem Sheet lesen und in Liste schreiben (alle Daten sind vorhanden)
2.alle Objekte in der Liste in die DB schreiben (hier gehen die Daten verlohren)
3. Nächste Datei vornehmen
Hier meine Datenbankklasse:
Aufgerufen wird die insertDataHolder() in einer for each Schleife:
Vielen Dank schonmal an euch, ich hoffe jemand hat eine zündene Idee
Grüße
MrTobi
ich habe mal eine Frage ich importiere von 20 - 60 verschiedenen Exceldatein Daten (im Durchschnitt ca. 4500
Zeilen pro Datei)
Mir fällt auf, dass mein Programm alle Daten richtig ließt aber beim schreiben in die DB Daten verloren gehen.
Nun wollte ich euch fragen ob ihr eine Idee habt wie man dies umgehen kann da ich immer das Gefühl habe wenn ich debugge (und somit alles künstlich verlangsamt wird) werden alle Daten pro Datei korrekt importiert.
Nun wollte ich wissen wie ich mein Programm so ändern muss das es eben alle Daten richtig inserted.
Dazu folgende Idee: eine künstliche Pause nach x inserts. (Ich habs mit Thread.Sleep(2000) versucht, aber irgendwie liegt das ganze Programm dann still und zwar länger wie 2 Millisekunden. Und will einfach nix mehr machen.
Generell bin ich immer dankbar für Verbesserungsvorschläge falls euch irgendwas nicht gefällt in den Klassen.
Abfolge meines Programmes:
1.alle daten aus aktuellem Sheet lesen und in Liste schreiben (alle Daten sind vorhanden)
2.alle Objekte in der Liste in die DB schreiben (hier gehen die Daten verlohren)
3. Nächste Datei vornehmen
Hier meine Datenbankklasse:
Java:
package IOHandler;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import Logic.DataHolder;
/**
*
* Handles the connection to the database access
*
* Important: Singelton Pattern is used to make sure only one connection
*
* to the database is established.
*/
public class DataBaseConnector {
/**
* local Variable
*/
private static DataBaseConnector instance;
private Connection myConn;
public Connection getConnection() {
return myConn;
}
/**
* Constructor for the class
*
* @throws ClassNotFoundException
*
* @throws SQLException
*/
private DataBaseConnector() {
PathReader myPathReader = new PathReader();
String idDatabasepath = myPathReader.getXmlElements("path.xml", "Database").get(0);
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String sUsr = "";
String sPw = "";
String sDbUrl = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="
+ idDatabasepath +";READONLY=false;}";
try {
myConn = DriverManager.getConnection(sDbUrl, sUsr, sPw);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* Make sure singleton is realized
*
* @return the connection
*
*/
public synchronized static DataBaseConnector getInstance(){
if (instance == null) {
instance = new DataBaseConnector();
}
return instance;
}
/**
*
* @param currentHolder
*
* @throws SQLException
*/
public void insertDataHolder(DataHolder currentHolder) throws SQLException{
String query = "INSERT INTO tbl_Excelalle("+"MLFB,"+"Geraet,"+"GeraetAS,"+"ArtikelNr,"+"ASZahl,"+"EinfuegeDatum)"+"VALUES(?,?,?,?,?,?)";
PreparedStatement prstmt = myConn.prepareStatement(query);
if(currentHolder.getsMLFB()!=null){
prstmt.setString(1,currentHolder.getsMLFB());
}else{
prstmt.setString(1,null);
}
if(currentHolder.getsGeraet()!=null){
prstmt.setString(2,currentHolder.getsGeraet());
}else{
prstmt.setString(2, null);
}
if(currentHolder.getiGeraetAS()!=null){
prstmt.setString(3, currentHolder.getiGeraetAS());
}else{
prstmt.setString(3, null);
}
if(currentHolder.getsArtikelNr()!=null){
prstmt.setString(4, currentHolder.getsArtikelNr());
}else{
prstmt.setString(4, null);
}
if(currentHolder.getiAS()!=null){
prstmt.setString(5, currentHolder.getiAS());
}else{
prstmt.setString(5, null);
}
prstmt.setDate(6, new java.sql.Date(System.currentTimeMillis()));
prstmt.executeUpdate();
}
/**
*
* @throws SQLException
*/
public void closeConn() throws SQLException{
myConn.close();
}
}
Aufgerufen wird die insertDataHolder() in einer for each Schleife:
Java:
for (DataHolder inHolder : insertList) {
try {
/**
* Insert the DataHolder in the database
*/
myConnection.insertDataHolder(inHolder);
isfullimported = true;
} catch (Exception e) {
System.out.println("Fehler bei insert von: " +inHolder.toString());
failImports.add(inHolder);
isfullimported = false;
}
}
Vielen Dank schonmal an euch, ich hoffe jemand hat eine zündene Idee
Grüße
MrTobi