von DPunch » Do, 27.12.2012 17:35
Servus
Das ist in der Tat ein merkwürdiges Verhalten. Betroffen sind nur die DDL-fähigen Befehle .execute und .executeUpdate - und zwar genau dann, wenn zwischen der Erstellung des PreparedStatement-Objekt und dem Ausführen der Kommandos kein Zugriff auf das Objekt vorliegt.
Es scheint so, als wäre das Objekt aus irgendeinem Grund noch nicht vollständig initialisiert, so dass eine Anweisung, die etwas anderes als ein ResultSet zurückgibt, auf eine nicht gesetzte Property/Method zuzugreifen versucht.
Mit einem einfachen
oder einem vollkommen sinnfreien Aufruf wie
vor dem Ausführen des Statements wird diese Lücke geschlossen, warum auch immer.
Hier liegt eindeutig ein OOo-seitiger Bug vor.
Nebenbei angemerkt sei noch, dass PreparedStatements für DDL-Anweisungen und generell für nicht parametrisierte Anweisungen, die nicht mehrfach ausgeführt werden, grundsätzlich eher ungeeignet sind, hier ist ein "normales" Statement die bessere Wahl.
Servus
Das ist in der Tat ein merkwürdiges Verhalten. Betroffen sind nur die DDL-fähigen Befehle .execute und .executeUpdate - und zwar genau dann, wenn zwischen der Erstellung des PreparedStatement-Objekt und dem Ausführen der Kommandos kein Zugriff auf das Objekt vorliegt.
Es scheint so, als wäre das Objekt aus irgendeinem Grund noch nicht vollständig initialisiert, so dass eine Anweisung, die etwas anderes als ein ResultSet zurückgibt, auf eine nicht gesetzte Property/Method zuzugreifen versucht.
Mit einem einfachen
[code]oStatement.clearParameters[/code]
oder einem vollkommen sinnfreien Aufruf wie
[code]oStatement.Columns[/code]
vor dem Ausführen des Statements wird diese Lücke geschlossen, warum auch immer.
Hier liegt eindeutig ein OOo-seitiger Bug vor.
Nebenbei angemerkt sei noch, dass PreparedStatements für DDL-Anweisungen und generell für nicht parametrisierte Anweisungen, die nicht mehrfach ausgeführt werden, grundsätzlich eher ungeeignet sind, hier ist ein "normales" Statement die bessere Wahl.