PreparedStatement: SQL mit Werten
Der JDBC Connector führt SQL-Anweisungen mit dynamischen Input-Daten aus, wenn sie in folgender Input-XML-Struktur abgelegt werden.
Alternativ können Sie ab Release 5.0 der X4 BPMS auch SQL-Anweisungen mit benannten Parametern ausführen, siehe (7.4.0-de) NamedPreparedStatement: SQL mit benannten Parametern.
Input
<Beliebiger Elementname>
<preparedstatement resulttag="Ergebniselementname" timezone="Zeitzone"
format="Datumsformat">
<sql>
<!--SQL-Anweisungen-->
</sql>
<columns>
<column mode="in" name="frei wählbarer NCName"
index="Platzhalter-Index" type="Datentyp"
timezone="Zeitzone" format="Datumsformat">
</column>
</columns>
<rowset>
<row>
<Name><!--Wert--></Name>
</row>
</rowset>
</preparedstatement>
</Beliebiger Elementname>
Für jedes Element <preparedstatement/>
gilt:
Das optionale Attribut
timezone
gibt eine Zeitzone gemäßjava.util.TimeZone
, siehe http://docs.oracle.com/javase/1.5.0/docs/api/java/util/TimeZone.html, an, z. B.GMT+2
.Das optionale Attribut
format
gibt ein Datumsformat gemäß java.text.SimpleDateFormat an.
- Es enthält mindestens ein Element
<sql/>.
Falls Sie innerhalb der SQL-Anweisung oder für die Werte bzw. Daten der Tabellenspalten Zeichen verwenden, die in XML eine Bedeutung besitzen, maskieren Sie die SQL-Anweisung mit einem umgebenden CDATA -Block, z. B. <![CDATA[ SELECT * FROM TABLE WHERE ID<1 ]]>
oder <rowset><row><Name><!CDATA[ XML Zeichen “<“ in CDATA Element]]></Name></row></rowset>
.
So wird sichergestellt, dass die Zeichen im CDATA-Element nicht als XML interpretiert werden, sondern als Daten für den Adapter.
Für jedes Element <column/>
gilt:
Es darf beliebig häufig verwendet werden (
0
–n
-mal)Das optionale Attribut
mode
gibt die "Richtung" des Datenstroms an (in
: Input-Parameter für die Datenbank;out
: Ergebnisparameter aus der Datenbank;inout
: sowohl Input-Parameter als auch Ergebnisparameter; Standard:in
.Das Attribut
name
gibt einen frei wählbaren Namen (NCName) für ein Parameter an.Das Attribut
index
gibt einen ganzzahligen Platzhalterindex für den in Attributname
definierten Parameter an.Das optionale Attribut
type
gibt den Datentyp an (z. B.INTEGER
oderBLOB
; Standard:VARCHAR
).Das optionale Attribut
timezone
gibt eine Zeitzone gemäßjava.util.TimeZone,
siehe http://docs.oracle.com/javase/1.5.0/docs/api/java/util/TimeZone.html, an, z. B.GMT+2
.Das optionale Attribut
format
gibt ein Datumsformat gemäßjava.text.SimpleDateFormat
an.
Für jedes Element <rowset/>
gilt:
Es darf beliebig häufig verwendet werden (
0
–n-mal)
Es enthält mindestens ein Element
<row/>
, das die Statement-Ausführung steuert.
Für jedes Element <row/>
gilt:
Es darf beliebig viele Elemente enthalten, die den Namen der Tabellenspalte oder den im SQL-Statement gesetzten Spalten-Alias tragen.
Die darin liegenden Elemente enthalten die jeweiligen Werte.
Beachten Sie Folgendes
Die Attribute
mode
undformat
sind in X4 Server Revision 31469 Pflichtparameter; ab neueren Versionen sind diese optional.Zulässige Datentypen für das Attribut
type
zum Setzen (Input-Parameter) und Lesen (ResultSet) von Werten sind:BIGINT, BINARY, BIT, BOOLEAN, BLOB, CHAR, CLOB, DATE, DECIMAL, DOUBLE, FLOAT, INTEGER, LONGNVARCHAR, LONGVARBINARY, LONGVARCHAR, NCHAR, NCLOB, NULL, NUMERIC, NVARCHAR, REAL, SMALLINT, SQLXML, TIME, TIMESTAMP, TINYINT, VARBINARY und VARCHAR
(Standard),XML
(alias für SQLXML).
Beispiel
<Rootelement>
<preparedstatement resulttag="abc" timezone="MEZ"
format="dd.MM.yyyy">
<sql>
<![CDATA[SELECT * FROM JMS_USERS WHERE USERID=?]]>
</sql>
<columns>
<column mode="in" name="id" index="1"
type="INTEGER">
</column>
</columns>
<rowset>
<row>
<id>23</id>
</row>
</rowset>
</preparedstatement>
</Rootelement>
Output
Wurde die SQL-Anweisung erfolgreich ausgeführt, gibt der Adapter ein XML-Dokument mit folgender Struktur zurück, das die Antwort der Datenbank als Zeichenkette (String) enthält:
<Data>
<Ergebniselementname>
<Feld1><!--Wert--></Feld1>
<Feldn><!--Wert--></Feldn>
</Ergebniselementname>
</Data>