JavaScript-SQL-Adapter
improve this page | report issueÜbersicht
Ein SQL-Adapter ist für die Kommunikation mit SQL-Datenquellen bestimmt. Sie können einfache SQL-Abfragen oder gespeicherte Prozeduren verwenden.
Für das Herstellen einer Verbindung zu einer Datenbank benötigt der JavaScript-Code einen JDBC-Connector-Treiber für den konkreten Datenbanktyp. Sie müssen den zum Datenbanktyp passenden JDBC-Connector-Treiber herunterladen und als Abhängigkeit zu Ihrem Projekt hinzufügen. Weitere Informationen zum Hinzufügen einer Abhängigkeit finden Sie im Abschnitt “Abhängigkeiten” des Lernprogramms Java- und JavaScript-Adapter erstellen.
In diesem Lernprogramm mit dem zugehörigen Beispiel erfahren Sie, wie ein Adapter zum Herstellen einer Verbindung zu einer MySQL-Datenbank verwendet wird.
Voraussetzung: Arbeiten Sie zuerst das Lernprogramm JavaScript-Adapter durch.
XML-Datei
Die XML-Datei enthält Einstellungen und Metadaten.
Deklarieren Sie in der Datei adapter.xml die folgenden Parameter:
- JDBC-Treiberklasse
- Datenbank-URL
- Benutzername
- Kennwort
<?xml version="1.0" encoding="UTF-8"?>
<mfp:adapter name="JavaScriptSQL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mfp="http://www.ibm.com/mfp/integration"
xmlns:sql="http://www.ibm.com/mfp/integration/sql">
<displayName>JavaScriptSQL</displayName>
<description>JavaScriptSQL</description>
<connectivity>
<connectionPolicy xsi:type="sql:SQLConnectionPolicy">
<dataSourceDefinition>
<driverClass>com.mysql.jdbc.Driver</driverClass>
<url>jdbc:mysql://localhost:3306/mobilefirst_training</url>
<user>mobilefirst</user>
<password>mobilefirst</password>
</dataSourceDefinition>
</connectionPolicy>
</connectivity>
</mfp:adapter>
- xsi:type: Dieses obligatorische Attribut muss auf den Wert sql:SQLConnectionPolicy gesetzt sein.
- dataSourceDefinition: Enthält die Parameter für die Verbindung zu einer Datenquelle (optional). Der Adapter erstellt für jede Anforderung eine Verbindung. Beispiel:
<connectionPolicy xsi:type="sql:SQLConnectionPolicy"> <dataSourceDefinition> <driverClass>com.mysql.jdbc.Driver</driverClass> <url>jdbc:mysql://localhost:3306/mysqldbname</url> <user>user_name</user> <password>password</password> </dataSourceDefinition> </connectionPolicy>
- dataSourceJNDIName: Sie können Sie für die Verbindung zur Datenquelle den JNDI-Namen einer vom Anwendungsserver verwendeten Datenquelle verwenden (optional). Der Adapter entnimmt die Verbindung aus dem Serververbindungspool, der dem JNDI-Namen zugeordnet ist. Anwendungsserver bieten eine Möglichkeit, Datenquellen zu konfigurieren. Weitere Informationen finden Sie unter "MobileFirst Server in einem Anwendungsserver installieren". Beispiel:
<connectionPolicy xsi:type="sql:SQLConnectionPolicy"> <dataSourceJNDIName>my-adapter-ds</dataSourceJNDIName> </connectionPolicy>
Wenn Sie die Verbindungsrichtlinie (connectionPolicy
) konfiguriert haben, deklarieren Sie in der Adapter-XML-Datei eine Prozedur.
<procedure name="getAccountTransactions1"/>
JavaScript-Implementierung
Die Adapter-JavaScript-Datei wird für die Implementierung der Prozedurlogik verwendet.
Es gibt zwei Möglichkeiten, SQL-Anweisungen auszuführen:
- Abfrage mit SQL-Anweisung
- Gespeicherte SQL-Prozedur
Abfrage mit SQL-Anweisung
- Weisen Sie Ihre SQL-Abfrage einer Variablen zu. Diese Zuweisung muss immer außerhalb des Funktionsbereichs erfolgen.
- Fügen Sie ggf. Parameter hinzu.
- Verwenden Sie die Methode
MFP.Server.invokeSQLStatement
, um vorbereitete Abfragen aufzurufen. -
Geben Sie das Ergebnis an die Anwendung oder an eine andere Prozedur zurück.
// 1. Weisen Sie Ihre SQL-Abfrage (außerhalb des Funktionsbereichs) einer Variablen zu. // 2. Fügen Sie ggf. Parameter hinzu. var getAccountsTransactionsStatement = "SELECT transactionId, fromAccount, toAccount, transactionDate, transactionAmount, transactionType " + "FROM accounttransactions " + "WHERE accounttransactions.fromAccount = ? OR accounttransactions.toAccount = ? " + "ORDER BY transactionDate DESC " + "LIMIT 20;"; // Vorbereitete SQL-Abfrage aufrufen und Aufrufergebnis zurückgeben function getAccountTransactions1(accountId){ // 3. Verwenden Sie die Methode `MFP.Server.invokeSQLStatement`, um vorbereitete Abfragen aufzurufen. // 4. Geben Sie das Ergebnis an die Anwendung oder an eine andere Prozedur zurück. return MFP.Server.invokeSQLStatement({ preparedStatement : getAccountsTransactionsStatement, parameters : [accountId, accountId] }); }
Gespeicherte SQL-Prozedur
Führen Sie eine gespeicherte SQL-Prozedur mit der Methode MFP.Server.invokeSQLStoredProcedure
aus. Geben Sie den Namen einer gespeicherten SQL-Prozedur als Aufrufparameter a.
// Gespeicherte SQL-Prozedur aufrufen und Aufrufergebnis zurückgeben
function getAccountTransactions2(accountId){
// Gespeicherte SQL-Prozedur mit der Methode MFP.Server.invokeSQLStoredProcedure ausführen
return MFP.Server.invokeSQLStoredProcedure({
procedure : "getAccountTransactions",
parameters : [accountId]
});
}
Mehrere Parameter verwenden
Wenn Sie in einer SQL-Abfrage einen oder mehrere Parameter verwenden, müssen die Variablen in der Funktion akzeptiert und als Array
an den Parameter invokeSQLStatement
oder invokeSQLStoredProcedure
übergeben werden.
var getAccountsTransactionsStatement = "SELECT transactionId, fromAccount, toAccount, transactionDate, transactionAmount, transactionType " +
"FROM accounttransactions " +
"WHERE accounttransactions.fromAccount = ? AND accounttransactions.toAccount = ? " +
"ORDER BY transactionDate DESC " +
"LIMIT 20;";
// Vorbereitete SQL-Abfrage aufrufen und Aufrufergebnis zurückgeben
function getAccountTransactions1(fromAccount, toAccount){
return MFP.Server.invokeSQLStatement({
preparedStatement : getAccountsTransactionsStatement,
parameters : [fromAccount, toAccount]
});
}
Aufrufergebnis
Das Ergebnis wird als JSON-Objekt abgerufen.
{
"isSuccessful": true,
"resultSet": [{
"fromAccount": "12345",
"toAccount": "54321",
"transactionAmount": 180.00,
"transactionDate": "2009-03-11T11:08:39.000Z",
"transactionId": "W06091500863",
"transactionType": "Funds Transfer"
}, {
"fromAccount": "12345",
"toAccount": null,
"transactionAmount": 130.00,
"transactionDate": "2009-03-07T11:09:39.000Z",
"transactionId": "W214122\/5337",
"transactionType": "ATM Withdrawal"
}]
}
- Die Eigenschaft
isSuccessful
definiert, ob der Aufruf erfolgreich war. - Das Objekt
resultSet
ist ein Array mit zurückgegebenen Datensätzen. - Schreiben Sie Folgendes, um auf der Clientseite auf das
resultSet
-Objekt zuzugreifen:result.invocationResult.resultSet
. - Schreiben Sie Folgendes, um auf der Serverseite auf das
resultSet
-Objekt zuzugreifen:result.ResultSet
.
Beispieladapter
Klicken Sie hier, um das Maven-Adapterprojekt herunterzuladen.
Zum Maven-Adapterprojekt gehört der oben beschriebene JavaScriptSQL-Adapter.
Außerdem ist im Ordner Utils des Projekts ein SQL-Script enthalten.
Verwendung des Beispiels
- Führen Sie in Ihrer SQL-Datenbank das SQL-Script aus.
- Stellen Sie sicher, dass dem Benutzer
mobilefirst@%
alle Zugriffsberechtigungen erteilt wurden. - Verwenden Sie Maven, die MobileFirst CLI oder eine IDE Ihrer Wahl, um den JavaScript-SQL-Adapter zu erstellen und zu implementieren.
- Informationen zum Testen oder Debuggen eines Adapters enthält das Lernprogramm Adapter testen und debuggen.
Für Tests muss der Accountwert als Array (["12345"]
) übergeben werden.
Inclusive terminology note: The Mobile First Platform team is making changes to support the IBM® initiative to replace racially biased and other discriminatory language in our code and content with more inclusive language. While IBM values the use of inclusive language, terms that are outside of IBM's direct influence are sometimes required for the sake of maintaining user understanding. As other industry leaders join IBM in embracing the use of inclusive language, IBM will continue to update the documentation to reflect those changes.