Adaptador JavaScript SQL

improve this page | report issue

Visión general

Un adaptador SQL se diseña con el propósito de comunicarse con un origen de datos SQL. Utilice consultas SQL simples o procedimientos almacenados.

Para conectarse a una base de datos, el código JavaScript necesita un controlador de conector JDBC para el tipo de base de datos específico. El controlador del conector JDBC se debe descargar de forma independiente para el tipo de base de datos específico y añadirlo como una dependencia en su proyecto. Para obtener más información sobre cómo añadir una dependencia, consulte la sección de Dependencias en la guía de aprendizaje Creación de adaptadores Java y JavaScript.

En esta guía de aprendizaje y en el ejemplo que lo acompaña, aprenderá a utilizar un adaptador para conectarse a una base de datos MySQL.

Requisito previo: Asegúrese de leer primero la guía de aprendizaje Adaptadores JavaScript.

El archivo XML

El archivo XML contiene los valores y metadatos.

En el archivo adapter.xml, declare los siguientes parámetros:

  • Clase de controlador JDBC
  • URL de base de datos
  • Nombre de usuario
  • Contraseña

<?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: Obligatorio. El valor de este atributo debe ser sql:SQLConnectionPolicy.
  • dataSourceDefinition: Opcional. Contiene los parámetros necesarios para conectarse a un origen de datos. El adaptador crea una conexión para cada solicitud. Por ejemplo:
    <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: Opcional. Conecta al origen de datos mediante el nombre JNDI de un origen de datos que el servidor de aplicaciones proporciona. El adaptador toma la conexión de la agrupación de conexiones del servidor que está asociado con el nombre JNDI. Los servidores de aplicaciones proporcionan una forma de configurar orígenes de datos. Para obtener más información, consulte Instalación de MobileFirst Server en un servidor de aplicaciones. Por ejemplo:
                            
    <connectionPolicy xsi:type="sql:SQLConnectionPolicy">
        <dataSourceJNDIName>my-adapter-ds</dataSourceJNDIName>
    </connectionPolicy>

Con connectionPolicy configurado, declare un procedimiento en el archivo XML del adaptador.

<procedure name="getAccountTransactions1"/>

Implementación JavaScript

El archivo JavaScript del adaptador se utiliza para implementar la lógica del procedimiento.
Hay dos formas de ejecutar sentencias SQL:

  • Consulta de sentencia SQL
  • Procedimiento almacenado SQL

Consulta de sentencia SQL

  1. Asigne su consulta SQL a una variable. Esto se debe realizar siempre fuera del ámbito de la función.
  2. Añada parámetros, si es necesario.
  3. Utilice el método MFP.Server.invokeSQLStatement para llamar a consultas preparadas.
  4. Devuelva el resultado a la aplicación o a otro procedimiento.

    // 1. Assign your SQL query to a variable (outside the function scope)
    // 2. Add parameters, if necessary
    var getAccountsTransactionsStatement = "SELECT transactionId, fromAccount, toAccount, transactionDate, transactionAmount, transactionType " +
     "FROM accounttransactions " +
     "WHERE accounttransactions.fromAccount = ? OR accounttransactions.toAccount = ? " +
     "ORDER BY transactionDate DESC " +
     "LIMIT 20;";
    
     // Invoke prepared SQL query and return invocation result
    function getAccountTransactions1(accountId){
    // 3. Use the `MFP.Server.invokeSQLStatement` method to call prepared queries
    // 4. Return the result to the application or to another procedure.
         return MFP.Server.invokeSQLStatement({
            preparedStatement : getAccountsTransactionsStatement,
            parameters : [accountId, accountId]
         });
    }
    

Procedimiento almacenado SQL

Para ejecutar un procedimiento almacenado SQL, utilice el método MFP.Server.invokeSQLStoredProcedure. Especifique un nombre de procedimiento almacenado SQL como parámetro de invocación.

// Invoke stored SQL procedure and return invocation result
function getAccountTransactions2(accountId){
  // To run a SQL stored procedure, use the `MFP.Server.invokeSQLStoredProcedure` method
  return MFP.Server.invokeSQLStoredProcedure({
    procedure : "getAccountTransactions",
    parameters : [accountId]
  });
}

Utilización de varios parámetros

Cuando se utiliza un único parámetro o varios parámetros en una consulta SQL asegúrese de aceptar las variables en la función y pasarlas a los parámetros invokeSQLStatement o invokeSQLStoredProcedure en una matriz.

var getAccountsTransactionsStatement = "SELECT transactionId, fromAccount, toAccount, transactionDate, transactionAmount, transactionType " +
	"FROM accounttransactions " +
	"WHERE accounttransactions.fromAccount = ? AND accounttransactions.toAccount = ? " +
	"ORDER BY transactionDate DESC " +
	"LIMIT 20;";

//Invoke prepared SQL query and return invocation result
function getAccountTransactions1(fromAccount, toAccount){
	return MFP.Server.invokeSQLStatement({
		preparedStatement : getAccountsTransactionsStatement,
		parameters : [fromAccount, toAccount]
	});
}

Resultados de invocación

El resultado se recupera como un objeto JSON:

{
  "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"
  }]
}
  • La propiedad isSuccessful define si la invocación ha sido satisfactoria.
  • El objeto resultSet es una matriz con los registros devueltos.
  • Para acceder al objeto resultSet en el lado del cliente: result.invocationResult.resultSet
  • Para acceder al objeto resultSet en el lado del servidor: result.ResultSet

Adaptador de ejemplo

Pulse para descargar el proyecto Maven Adapters.

El proyecto Maven Adapters incluye el adaptador JavaScriptSQL descrito con anterioridad.
También se incluye un script SQL en la carpeta Utils.

Uso de ejemplo

Al realizar pruebas, el valor de la cuenta se debería pasar en una matriz: ["12345"].

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