Unterschied .prepareStatement <> .createStatement

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Unterschied .prepareStatement <> .createStatement

Re: Unterschied .prepareStatement <> .createStatement

von F3K Total » Do, 27.12.2012 18:50

Hallo DPunch
DPunch hat geschrieben: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.
vielen Dank für die Erklärung.
Dann bleibt es bei mir für die DDL bei .createStatement. Für die DML .prepareStatement.

beste Grüße von Rik

Re: Unterschied .prepareStatement <> .createStatement

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

Code: Alles auswählen

oStatement.clearParameters
oder einem vollkommen sinnfreien Aufruf wie

Code: Alles auswählen

oStatement.Columns
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.

Re: Unterschied .prepareStatement <> .createStatement

von F3K Total » Do, 27.12.2012 14:01

Hallo Jürgen,
.execute ... hatte ich bereits probiert, geht nicht.
Gruß Rik

Re: Unterschied .prepareStatement <> .createStatement

von juetho » Do, 27.12.2012 13:56

Hat jemand eine Idee wieso?
Meine Vermutung lautet, dass es am DDL-Befehl scheitert. Laut API-Referenz sollen auch DDL-Befehle ausgeführt werden können. Aber vielleicht will die Datenbank selbst das nicht erledigen, während die Schnittstelle zwischen Base und der Datenbank noch "großzügig" ist.

Versuch' doch einmal execute; vielleicht klappt es damit. Gruß Jürgen

Unterschied .prepareStatement <> .createStatement

von F3K Total » Do, 27.12.2012 12:38

Hallo zusammen,
in diesem Beitrag hat DPunch freundlicherweise erläutert, wo der Unterschied der o.a. Befehle liegt.
Ich übe gerade damit und kann Abfragen, Parameterabfragen, insert und update-Befehle erzeugen und ausführen.
Der Versuch mit .prepareStatement eine Tabelle anzulegen scheitert, zum Vergleich:
Mit diesem Code klappts:

Code: Alles auswählen

Sub S_create_Statement_Create_Table
ocontroller = thisdatabasedocument.currentcontroller
if not ocontroller.isconnected then ocontroller.connect
oconnection = ocontroller.ActiveConnection
ostatement = oconnection.createstatement
sSql = "Create table TEST (ID Integer, NUMMER Integer)"
oStatement.executeupdate(sSql)
msgbox "fertig"
End Sub
Mit diesem Code ...

Code: Alles auswählen

Sub S_prepare_Statement_Create_Table
ocontroller = thisdatabasedocument.currentcontroller
if not ocontroller.isconnected then ocontroller.connect
oconnection = ocontroller.ActiveConnection
sSql = "Create table TEST (ID Integer, NUMMER Integer)"
oStatement = oconnection.prepareStatement(sSql)
oStatement.executeupdate
msgbox "fertig"
End Sub
... bekomme ich folgende Fehlermeldung
prep.png
prep.png (13.06 KiB) 1220 mal betrachtet
Hat jemand eine Idee wieso?

beste Grüße von Rik

Nach oben