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

  1. Weisen Sie Ihre SQL-Abfrage einer Variablen zu. Diese Zuweisung muss immer außerhalb des Funktionsbereichs erfolgen.
  2. Fügen Sie ggf. Parameter hinzu.
  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.

    // 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ü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.
Last modified on February 27, 2020