ODBC-Treiber sehr langsam

Rin

Mitglied
Hallo leute,

ich habe ein problem mit ODBC-Treibern also folgende Rutine:
Java:
public static void ImportFromCsvToAccessTable (String accessTableName
			, String csvDirPath, String csvFileName) throws ClassNotFoundException, SQLException {
			frm_start start = new frm_start();
			Connection con = DriverManager.getConnection("jdbc:odbc:mydb");

			try{
				Date nowDate = new Date();
				SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm");
				String now = df.format(nowDate);
				CsvReader reader = new CsvReader(csvDirPath +  "\\" +  csvFileName);
				reader.setDelimiter(';');
				reader.readHeaders();
				ArrayList<String> dlist = new ArrayList<String>();


				while (reader.readRecord())
				{
					String[] values = reader.getValues();
					StringBuffer strgSQLbuff = new StringBuffer();

					strgSQLbuff.append("INSERT INTO Import2(SDCallID,Eroeffnet,Beschreibung,Einmelder," +
							"EinmelderEmail,Betroffener,BetroffenerEmail,LastImport) ");
							strgSQLbuff.append("VALUES(");

						for (int i = 0; i < values.length - 1; i++)
						{
							String newValue = values[i].replaceAll("\'", "\"");
							strgSQLbuff.append("'" + newValue + "'");
							if (i < values.length - 1)
							strgSQLbuff.append(",");
						}

					strgSQLbuff.append("'" + now+ "'");
					strgSQLbuff.append(");");
					dlist.add(strgSQLbuff.toString());
				}

				Iterator<String> it = dlist.iterator();

					try
					{
						while(it.hasNext())
						{
							String strgSQL = (String) it.next();
							System.out.println(strgSQL);
							PreparedStatement selectPrepSt = con.prepareStatement(strgSQL);
							boolean result = selectPrepSt.execute();
							System.out.println("result = " + result + "Import Tabelle gefüllt!" );
						}
					}
					catch (SQLException e)
					{
						JOptionPane.showMessageDialog(start, "Es ist ein Fehler beim importieren der Daten aufgetreten! " +
													 "Die csv-Datei ist fehlerhaft!",
													 "Fehler!", JOptionPane.ERROR_MESSAGE);
						System.out.println("Fehler bei Import: ");
						e.printStackTrace();
					}

				boolean result;

					try
					{
						String copyStmt1 = "INSERT INTO Einmelder2(Einmelder,EinmelderEmail) " +
								"SELECT DISTINCT import.Betroffener, import.BetroffenerEmail " +
								"FROM Import2 import " +
								"WHERE import.Betroffener <> '' " +
								"AND import.Betroffener IS NOT NULL " +
								"AND NOT EXISTS " +
								"(SELECT * FROM Einmelder2 einm2 WHERE einm2.Einmelder = import.Betroffener);";
								PreparedStatement copyPrepSt1 = con.prepareStatement(copyStmt1);
								result = copyPrepSt1.execute();
					}
					catch (SQLException e)
					{
						JOptionPane.showMessageDialog(start, "Beim einlesen der Einmelder/Betroffenen ist ein Fehler aufgetreten!" +
													 "Einmelder ist schon vorhanden!",
													 "Fehler!", JOptionPane.ERROR_MESSAGE);
						e.printStackTrace();
					}

					try
					{
					String copyStmt2 = "INSERT INTO Einmelder2(Einmelder,EinmelderEmail) " +
								"SELECT DISTINCT import.Einmelder, import.EinmelderEmail FROM Import2 import " +
								"WHERE (import.Betroffener = '' OR import.Betroffener IS NULL) " +
								"AND NOT EXISTS " +
								"(SELECT * FROM Einmelder2 einm2 WHERE einm2.Einmelder = import.Einmelder);";
						PreparedStatement copyPrepSt2 = con.prepareStatement(copyStmt2);
						result = copyPrepSt2.execute();

					}
					catch (SQLException e)
					{
						JOptionPane.showMessageDialog(start, "Beim einlesen der Einmelder/Betroffenen ist ein Fehler aufgetreten!",
								 					 "Fehler!", JOptionPane.ERROR_MESSAGE);
						e.printStackTrace();
					}

					try
					{
						String copyStmt3 = "INSERT INTO Incidents2(SDCallID,Eroeffnet,Beschreibung,EinmelderID) " +
								"SELECT import.SDCallID, import.Eroeffnet, import.Beschreibung, einmelder.EinmelderID " +
								"FROM Import2 import, Einmelder2 einmelder " +
								"WHERE ((import.Betroffener IS NOT NULL AND import.Betroffener <> '') " +
								"AND import.Betroffener = einmelder.Einmelder) " +
								"OR ((import.Betroffener IS NULL OR import.Betroffener = '') " +
								"AND import.Einmelder = einmelder.Einmelder);";
						PreparedStatement copyPrepSt3 = con.prepareStatement(copyStmt3);
						result = copyPrepSt3.execute();
					}
					catch (SQLException e)
					{
						JOptionPane.showMessageDialog(start, "Beim einlesen der Tickets ist ein Fehler aufgetreten!",
													 "Fehler!", JOptionPane.ERROR_MESSAGE);
						e.printStackTrace();
					}

				String delStmt = "DELETE * FROM Import2";
				PreparedStatement deletePrepSt = con.prepareStatement(delStmt);
				result = deletePrepSt.execute();
				System.out.println(result);

				JOptionPane.showMessageDialog(start, "Import wurde durchgeführt!");

			} catch(Exception e) {
				System.out.println(e);
				e.printStackTrace();

			} finally {
				con.close();

			}

	}

bitte nicht wundern warum ich Preparedstatements verwende ich bin noch nicht dazu gekommen es auf statements umzuschreiben bzw. Preparedstatments vor zu bereiten,

also folgendes problem die methode is einbandfrei gelaufen mit knapp 100 - 200 datensätzen von einem csv file in eine Access Datenbank zu importieren, jetzt habe ich den ersten Test gemacht mit einem csv file das zirka 1500-2000 datensätze enthält und sobald ich diese importieren will fängt er schnell an und ab dem hundertsten Datensatz fängt er an alle extrem lang einzeln einzulesen.... das soll aber nicht sein. jetzt habe ich gegoogelt und hab gelesen das ODBC da prinzipiel probleme macht aber leider keine lösung gefunden wie ich das beheben bzw umändern oder schneller machen kann.

ich hab mich auch nach einem alternativ driver umgesehen aber bis jetzt nur kostenpflichtige gefunden......

hoffe ihr könnt mir weiter helfen

LG Rin
 
M

maki

Gast
PreparedStatements sind Statements eigetnlich immer zu bevorzugen.
Schätze dein Performance Problem liegt wirklich an der JDBC-ODBC Krücke, war ja nie für den Prod. Einsatz gedacht, sondern nur als Demo als es noch keine JDBC Treiber gab.
Access selber könte auch die Performace Probleme verursachen, kannst du denn keine richtige DB nehmen?
 

Rin

Mitglied
hm.. ja hab ich mir auch schon gedacht das access das extrem bremst

hm... das problem ist das soll ein programm sein das einfach nur auf einen rechner läuft und von einem benutzer gesteuert wird und auch nur von einer person die daten eingesehen werden können und da is es etwas unnötig einen MySQL server oder ORACEL zu verwenden und andere opensource dbs wie SQLlite oder die Java DB hab ich bis jetzt noch nie benutzt....


lg
 
M

maki

Gast
Derby/JavaDB, H2, HSQL, etc. pp. sind alle gut & schnell.
Solltest mal im Forum suchen, haben ca. alle 2 Wochen einen Thread mit dem Titel "Welche Datenbank", da geht es um genau diese Datenbanken (bitte keinen neuen Thread zu diesem Thema aufmachen :().

Access ist jedenfalls die schlechteste Möglichkeit wenn es keinen Zwang gibt es zu verwenden.
 

Rin

Mitglied
ok werd ich mich mal umschauen =) danke für die infos in hab mir eh gerade JavaDB runtergeladen :)

eine frage noch viel umschreiben brauch ich eingentlich nicht das is eh auch auf SQL Basis und halt die connection is anders gelöst und ich muss die tabellen voher per code createn oder??
 
M

maki

Gast
Tabellen musst du anlegen, ist bei jedem RDBMS so, JDBC ist ein Standard, da wird nix anders gelöst bei der Connection, die URL ist natürlich anders (RDBMS spezifisch).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S ODBC Treiber in Java Editor einbinden Datenbankprogrammierung 3
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
NoXiD Access Datenbank in java einbinden ohne ODBC treiber zu erstellen Datenbankprogrammierung 5
M JDBC/ODBC Treiber-Einbindung Datenbankprogrammierung 5
KaffeeFan JDBC/ODBC-Bridge entfernt Datenbankprogrammierung 4
W Keine ODBC-Verbindung zur MSAccess-Datenbank Datenbankprogrammierung 2
S sun.jdbc.odbc.JdbcOdbcDriver wird nicht gefunden Datenbankprogrammierung 2
thet1983 MySQL ODBC Driver zuweisen unter Mac OX Mav Datenbankprogrammierung 2
X MySQL DB-verbindung ohne JDBC/ODBC Datenbankprogrammierung 1
F sun.jdbc.odbc.jdbcodbcdriver wird nicht gefuden Datenbankprogrammierung 3
0 ODBC Bezeichner zu lang HILF Datenbankprogrammierung 6
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
Y java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state Datenbankprogrammierung 2
M Zugriff auf mdb via ODBC steuern Datenbankprogrammierung 2
S Access 2007 zugreifen- ODBC Driver Manger Datenbankprogrammierung 3
J mit java in access DB über odbc/jdbc Datenbankprogrammierung 2
E [ACCESS ODBC] INSERT INTO Fehler Datenbankprogrammierung 4
G ODBC Insert und gleich danach Selects Datenbankprogrammierung 8
T ODBC + MySQL + Umlaute => Katastrophe Datenbankprogrammierung 4
J Datenquellen (ODBC) Vista(64) Datenbankprogrammierung 3
A Ich dreh durch mit JDBC & ODBC! Datenbankprogrammierung 26
O JDBC:ODBC Problem Remedy ARS Datenbankprogrammierung 8
A JavaDB(Derby) als ODBC-Datenquelle eintragen Datenbankprogrammierung 4
D sun.jdbc.odbc.JdbcOdbcDriver Datenbankprogrammierung 13
V Überprüfen ob Tabelle existiert in Access per ODBC Datenbankprogrammierung 2
F JDBC -> ODBC -> DBF, MDX? Datenbankprogrammierung 7
S ODBC Registrierung? Datenbankprogrammierung 2
M jbcd : odbc Verbindung zu Accessdatei (*.mdb) Datenbankprogrammierung 9
S Kommerzieller JDBC-ODBC-Konnektor Datenbankprogrammierung 5
M Odbc und Fehler Datenbankprogrammierung 44
S Neues aus der JDBC-ODBC-Hölle Datenbankprogrammierung 3
D ODBC Zugriff auf MDB-Datenbank, Insert Into ohne Funktion Datenbankprogrammierung 2
P ODBC verbindung Java soll auf access mdb datei zugreifen Datenbankprogrammierung 2
G Access mit Java OHNE ODBC Datenbankprogrammierung 7
C Datenbankanbindung ohne ODBC JDBC Brücke Datenbankprogrammierung 5
N [Microsoft][ODBC Microsoft Access Driver]COUNT field incorre Datenbankprogrammierung 13
D Anforderungen für JDBC-ODBC Datenbankprogrammierung 6
B Hilfe! Problem bei Verbindung über JDBC/ODBC Datenbankprogrammierung 4
F JDBC:ODBC chinesische Zeichen aus Memofelder Datenbankprogrammierung 2
R wer kennt Sage - KHK ? ODBC funzt nicht ? Datenbankprogrammierung 9
F Zugriff auf ODBC-Datenbank übers Netzwerk Datenbankprogrammierung 6
R JDBC-ODBC: Alle ODBC-Datenquellen ermitteln? Datenbankprogrammierung 4
A Java und Accessdateien ohne ODBC? Datenbankprogrammierung 2
J Problem bei ODBC Verbindung mit Access Datenbankprogrammierung 4
B Möglichkeit an alle ODBC Namen zu kommen? Datenbankprogrammierung 4
V Access-Transaktion über jdbc:odbc Datenbankprogrammierung 4
M Andocken an eine odbc Schnittstelle Datenbankprogrammierung 3
G Mit JDBC-ODBC-Bridge auf entfernten Rechner zugreifen? Datenbankprogrammierung 2
C JDBC-ODBC Bridge Datenbankprogrammierung 1
Watsoon Treiber wird in Intellij nicht geladen Datenbankprogrammierung 2
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
B MySQL Data Tools Plattform - "Database Connections" findet den Treiber nicht Datenbankprogrammierung 1
C Über Classpath MongoDB Treiber einbinden und korrekte import Pfade Datenbankprogrammierung 8
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
dzim Cassandra Cluster DB und der Java-Treiber Datenbankprogrammierung 1
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
G PostgreSQL Treiber laden schlägt fehl wegen: "... passwortbasierte Authentifizierung ..." Datenbankprogrammierung 2
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
J JDBC in Library|"Treiber konnte nicht geladen werden"" Datenbankprogrammierung 2
D MySQL Treiber konnte nicht geladen werden Datenbankprogrammierung 3
N Welcher Treiber ist der beste? Datenbankprogrammierung 2
V PostgreSQL JDBC Treiber fehlt Datenbankprogrammierung 6
G PostgreSQL jar-file läd db-treiber nicht Datenbankprogrammierung 6
H Microsoft Access Treiber wird nicht gefunden Datenbankprogrammierung 9
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
Screen Ich suche eine SQLDatenbank ohne JDBC-Treiber Datenbankprogrammierung 12
D MySQl Treiber in .jar Datei einbinden, Bukkit Datenbankprogrammierung 2
C DB.Treiber wird nicht gefunden? Datenbankprogrammierung 5
M H2 Laden der H2-Treiber schlägt fehl Datenbankprogrammierung 2
E MySQL Treiber wird nicht geladen Datenbankprogrammierung 5
E MySQL Treiber aus NetBeans laden Datenbankprogrammierung 13
A mysql Treiber nich gefunden Java Editor Datenbankprogrammierung 6
C SQL Server Treiber [DBNETLIB] Datenbankprogrammierung 14
C Treiber laden Datenbankprogrammierung 4
padde479 Verfügbare Treiber anzeigen Datenbankprogrammierung 2
P Treiber für OracleDB Datenbankprogrammierung 5
S Benötige Hilfe mit DB Treiber Datenbankprogrammierung 4
G treiber für datenbank zugriff Datenbankprogrammierung 3
G Welchen Treiber? Datenbankprogrammierung 3
S Oracle JDBC Treiber Problem Datenbankprogrammierung 4
H Konnte den Treiber com.mysql.jdbc.Driver nicht laden. Datenbankprogrammierung 19
J MS sql Server 2005 Treiber Datenbankprogrammierung 9
R Eclipse findet JDBC Treiber nicht Datenbankprogrammierung 2
A Andere Möglichkeit als JDBC Treiber für den Datenbankzugriff Datenbankprogrammierung 3
G Probleme mit Laden des JDBC-Treiber in HSQLDB Datenbankprogrammierung 2
G DB2 Connect, welchen treiber? Datenbankprogrammierung 4
M Treiber wird nicht gefunden Datenbankprogrammierung 5
B Laden eines JDBC Treiber. Datenbankprogrammierung 7
G wohin mit dem treiber ? mysql-connector-java-5.0.5-bin.jar Datenbankprogrammierung 12
G Verwendung neuen Treiber für JDBC-Zugriff auf OracleDB Datenbankprogrammierung 5
N mysql.jdbc treiber wird nicht gefunden Datenbankprogrammierung 2
N MySQL Treiber via JDBC in Tomcat Servlet Datenbankprogrammierung 3
J Problem mit dem JDBC Treiber Datenbankprogrammierung 5
A Datenbankzugriff per Applet - Problem beim Treiber laden Datenbankprogrammierung 6
V JDBC Treiber laden Datenbankprogrammierung 2
I Keine Treiber-Klasse! Datenbankprogrammierung 9
G MySQL Treiber Datenbankprogrammierung 6
R Servlet, kann nicht den Treiber laden Datenbankprogrammierung 4
F SocketException vom mySQL-Treiber abfangen Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben