von Dirk123 » Mo, 17.09.2012 16:41
Hallo Zusammen,
ich habe ein Problem mit vielen SQL-Insert Kommandos. Nach einigen 100.000 Befehlen hängt sich das Test-Makro (siehe unten) auf. ID in der Datenbank ist auf LONG gestellt. OO Version ist 3.4.
Beispielprogramm:
Sub TEST
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DatenQZ = DatabaseContext.getByName("TESTDATENBANK")
Verbindung_QZ = DatenQZ.GetConnection("","")
SQL_Anweisung = Verbindung_QZ.createStatement()
Counter = 0
do while Counter < 100000000
SQL_Anweisung.execute("INSERT INTO TESTDATENBANK (TESTWERT) VALUES ('TEST')")
Counter = Counter + 1
loop
end Sub
Folgendes habe ich schon ohne Erfolg versucht:
SQL_Anweisung.executeUpdate(SQL) anstatt SQL_Anweisung.execute
wait 5 nach dem Insert
Mit ID Autoinkrement und ohne (dann ID selbst übergeben)
Verschiedene Datenbanksysteme: externe HSQLDB, interne Base Datenbank, MySQL
Verschiedene Betriebssysteme: Windows 7 64bit bzw. XP Home SP3.
Neuinstallation OO (vorher auch die entsprechenden Ordner gelöscht)
Java mit -Xmx bzw. -Xms Parametern aufgerufen
Verschiedene Java Versionen (32-bit) getestet: 1.6.035, 1.6.022
Folgende Feststellung konnte ich machen:
Je mehr Spalten im Insert übergeben werden, umso früher stürzt das Makro ab. Untenstehender Beispielcode schafft ca. 1,5 Mio Durchläufe. Mit 5 Spalten komme ich auf ca. 300.000 Durchläufe.
Deswegen ist meine Vermutung, dass irgendein interner Puffer überläuft.
Wer kann mir da helfen?
Ich benötige knapp 10 Mio. Inserts in einem Durchlauf. Das Ganze sollte in OO funktionieren, da auf OO-Dokumente zugegriffen werden muss.
Viele Grüße
Dirk
Hallo Zusammen,
ich habe ein Problem mit vielen SQL-Insert Kommandos. Nach einigen 100.000 Befehlen hängt sich das Test-Makro (siehe unten) auf. ID in der Datenbank ist auf LONG gestellt. OO Version ist 3.4.
[b]Beispielprogramm:[/b]
Sub TEST
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DatenQZ = DatabaseContext.getByName("TESTDATENBANK")
Verbindung_QZ = DatenQZ.GetConnection("","")
SQL_Anweisung = Verbindung_QZ.createStatement()
Counter = 0
do while Counter < 100000000
SQL_Anweisung.execute("INSERT INTO TESTDATENBANK (TESTWERT) VALUES ('TEST')")
Counter = Counter + 1
loop
end Sub
[b]Folgendes habe ich schon ohne Erfolg versucht:[/b]
SQL_Anweisung.executeUpdate(SQL) anstatt SQL_Anweisung.execute
wait 5 nach dem Insert
Mit ID Autoinkrement und ohne (dann ID selbst übergeben)
Verschiedene Datenbanksysteme: externe HSQLDB, interne Base Datenbank, MySQL
Verschiedene Betriebssysteme: Windows 7 64bit bzw. XP Home SP3.
Neuinstallation OO (vorher auch die entsprechenden Ordner gelöscht)
Java mit -Xmx bzw. -Xms Parametern aufgerufen
Verschiedene Java Versionen (32-bit) getestet: 1.6.035, 1.6.022
[b]Folgende Feststellung konnte ich machen:[/b]
Je mehr Spalten im Insert übergeben werden, umso früher stürzt das Makro ab. Untenstehender Beispielcode schafft ca. 1,5 Mio Durchläufe. Mit 5 Spalten komme ich auf ca. 300.000 Durchläufe.
Deswegen ist meine Vermutung, dass irgendein interner Puffer überläuft.
Wer kann mir da helfen?
Ich benötige knapp 10 Mio. Inserts in einem Durchlauf. Das Ganze sollte in OO funktionieren, da auf OO-Dokumente zugegriffen werden muss.
Viele Grüße
Dirk