Ejemplos de utilización de marcador de parámetro

DB2 Everyplace proporciona un rico conjunto de interfaces estándar incluyendo CLI/ODBC, JDBC y ADO.NET para acceder a los datos de modo eficaz. Los retazos de código de ejemplo siguientes muestran la utilización de una sentencia preparada con marcadores de parámetro para cada API de acceso a los datos.

Tome en consideración el esquema de tabla siguiente para la tabla t1, en el que la columna c1 es la clave primaria para la tabla t1.

Tabla 1. Esquema de tabla de ejemplo

Nombre de la columna Tipo de datos de Everyplace Anulable
c1 INTEGER falso
c2 SMALLINT verdadero
c3 CHAR(20) verdadero
c4 VARCHAR(20) verdadero
c5 DECIMAL(8,2) verdadero
c6 DATE verdadero
c7 TIME verdadero
c8 TIMESTAMP verdadero
c9 BLOB(30) verdadero

Los ejemplos siguientes ilustran el modo de insertar una fila en la tabla t1 utilizando una sentencia preparada.

Ejemplo de CLI

void parameterExample1(void)
{ 
   SQLHENV henv;
   SQLHDBC hdbc;
   SQLHSTMT hstmt;
   SQLRETURN      rc;
   TCHAR server[] = _T("C:\\mysample\\");
   TCHAR uid[] = _T("db2e");
   TCHAR pwd[] = _T("db2e");
   long p1 = 10;
   short p2 = 100;
   TCHAR p3[100];
   TCHAR p4[100];
   TCHAR p5[100];
   TCHAR p6[100];
   TCHAR p7[100];
   TCHAR p8[100];
   char  p9[100];
   long len = 0;
 
   _tcscpy(p3, _T("data1"));
   _tcscpy(p4, _T("data2"));
   _tcscpy(p5, _T("10.12"));
   _tcscpy(p6, _T("2003-06-30"));
   _tcscpy(p7, _T("12:12:12"));
   _tcscpy(p8, _T("2003-06-30-17.54.27.710000"));
 
   memset(p9, 0, sizeof(p9));
   p9[0] = 'X';
   p9[1] = 'Y';
   p9[2] = 'Z';
 
   rc = SQLAllocEnv(&henv);
   // comprobar código de retorno ...
 
   rc = SQLAllocConnect(henv, &hdbc);
   // comprobar código de retorno ...
 
   rc = SQLConnect(hdbc, (SQLTCHAR*)server, SQL_NTS,
 			(SQLTCHAR*)uid, SQL_NTS, (SQLTCHAR*)pwd, SQL_NTS);
   // comprobar código de retorno ...
 
   rc = SQLAllocStmt(hdbc, &hstmt);
   // comprobar código de retorno ...
 
   // preparar la sentencia
   rc = SQLPrepare(hstmt, _T("INSERT INTO t1 VALUES (?,?,?,?,?,?,?,?,?)"), SQL_NTS);
   // comprobar código de retorno ...
 
   // asociar parámetros de entrada
   rc = SQLBindParameter(hstmt, (unsigned short)1, SQL_PARAM_INPUT,
 						SQL_C_LONG, SQL_INTEGER, 4, 0, &p1, sizeof(p1), &len);
   // comprobar código de retorno ...
 
   rc = SQLBindParameter(hstmt, (unsigned short)2, SQL_PARAM_INPUT, SQL_C_LONG,
 						SQL_SMALLINT, 2, 0, &p2, sizeof(p2), &len);
   // comprobar código de retorno ...
 
   len = SQL_NTS;
   rc = SQLBindParameter(hstmt, (unsigned short)3, SQL_PARAM_INPUT, SQL_C_TCHAR,
 						SQL_CHAR, 0, 0, &p3[0], 100, &len);
   // comprobar código de retorno ...
 
   rc = SQLBindParameter(hstmt, (unsigned short)4, SQL_PARAM_INPUT, SQL_C_TCHAR,
 						SQL_VARCHAR, 0, 0, &p4[0], 100, &len);
   // comprobar código de retorno ...
 
   rc = SQLBindParameter(hstmt, (unsigned short)5, SQL_PARAM_INPUT, SQL_C_TCHAR,
 						SQL_DECIMAL, 8, 2, &p5[0], 100, &len);
   // comprobar código de retorno ...
 
   rc = SQLBindParameter(hstmt, (unsigned short)6, SQL_PARAM_INPUT, SQL_C_TCHAR,
 						SQL_TYPE_DATE, 0, 0, &p6[0], 100, &len);
   // comprobar código de retorno ...
 
   rc = SQLBindParameter(hstmt, (unsigned short)7, SQL_PARAM_INPUT, SQL_C_TCHAR,
 						SQL_TYPE_TIME, 0, 0, &p7[0], 100, &len);
   // comprobar código de retorno ...
 
   rc = SQLBindParameter(hstmt, (unsigned short)8, SQL_PARAM_INPUT, SQL_C_TCHAR,
 						SQL_TYPE_TIMESTAMP, 0, 0, &p8[0], 100, &len);
   // comprobar código de retorno ...
 
   len = 3;
   rc = SQLBindParameter(hstmt, (unsigned short)9, SQL_PARAM_INPUT, SQL_C_BINARY,
 						SQL_BINARY, 0, 0, &p9[0], 100, &len);
   // comprobar código de retorno ...
 
   // ejecutar la sentencia preparada
   rc = SQLExecute(hstmt);
   // comprobar código de retorno ...
 
   rc = SQLFreeStmt(hstmt, SQL_DROP);
   // comprobar código de retorno ...
 
   rc = SQLDisconnect(hdbc);
   // comprobar código de retorno ...
 
   rc = SQLFreeConnect(hdbc);
   // comprobar código de retorno ...
 
   rc = SQLFreeEnv(henv);
   // comprobar código de retorno ...
 
} 
 
 

Ejemplo de JDBC

public static void parameterExample1() {
 
   String driver = "com.ibm.db2e.jdbc.DB2eDriver";
   String url    = "jdbc:db2e:mysample";
   Connection conn = null;
   PreparedStatement pstmt = null;
 
 try
   { 
      Class.forName(driver);
 
      conn = DriverManager.getConnection(url);
 
      // preparar la sentencia
      pstmt = conn.prepareStatement("INSERT INTO t1 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
 
      // asociar los parámetros de entrada
      pstmt.setInt(1, 1);
      pstmt.setShort(2, (short)2);
      pstmt.setString(3, "data1");
      pstmt.setString(4, "data2");
      pstmt.setBigDecimal(5, new java.math.BigDecimal("12.34"));
      pstmt.setDate(6, new java.sql.Date(System.currentTimeMillis() ) );
      pstmt.setTime(7,  new java.sql.Time(System.currentTimeMillis() ) );
      pstmt.setTimestamp (8,  new java.sql.Timestamp(System.currentTimeMillis() ) );
      pstmt.setBytes(9, new byte[] { (byte)'X', (byte)'Y', (byte)'Z' } );
 
      // ejecutar la sentencia
      pstmt.execute();
 
      pstmt.close();
 
      conn.close();
   } 
   catch (SQLException sqlEx)
   { 
      while(sqlEx != null)
      { 
          System.out.println("SQLERROR: \n" + sqlEx.getErrorCode() +
             ", SQLState: " + sqlEx.getSQLState() +
             ", Message: " + sqlEx.getMessage() +
             ", Vendor: " + sqlEx.getErrorCode() );
         sqlEx = sqlEx.getNextException();
      } 
   } 
   catch (Exception ex)
   { 
      ex.printStackTrace();
   } 
} 
 
 

Ejemplo de ADO.NET

[C#]

public static void ParameterExample1()
{ 
   DB2eConnection conn = null;
   DB2eCommand cmd  = null;
   String connString   = @"database=.\; uid=db2e; pwd=db2e";
   int i = 1;
 
 try
   { 
      conn = new DB2eConnection(connString);
 
      conn.Open();
 
      cmd = new DB2eCommand("INSERT INTO t1 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", conn);
 
      // preparar el mandato
      cmd.Prepare();
 
      // asociar los parámetros de entrada
      DB2eParameter p1 = new DB2eParameter("@p1", DB2eType.Integer);
      p1.Value = ++i;
      cmd.Parameters.Add(p1);
 
      DB2eParameter p2 = new DB2eParameter("@p2", DB2eType.SmallInt);
      p2.Value = 100;
      cmd.Parameters.Add(p2);
 
      DB2eParameter p3 = new DB2eParameter("@p3", DB2eType.Char);
      p3.Value = "data1";
      cmd.Parameters.Add(p3);
 
      DB2eParameter p4 = new DB2eParameter("@p4", DB2eType.VarChar);
      p4.Value = "data2";
      cmd.Parameters.Add(p4);
 
      DB2eParameter p5 = new DB2eParameter("@p5", DB2eType.Decimal);
      p5.Value = 20.25;
      cmd.Parameters.Add(p5);
 
      DB2eParameter p6 = new DB2eParameter("@p6", DB2eType.Date);
      p6.Value = DateTime.Now;
      cmd.Parameters.Add(p6);
 
      DB2eParameter p7 = new DB2eParameter("@p7", DB2eType.Time);
      p7.Value = new TimeSpan(23, 23, 23);
      cmd.Parameters.Add(p7);
 
      DB2eParameter p8 = new DB2eParameter("@p8", DB2eType.Timestamp);
      p8.Value = DateTime.Now;
      cmd.Parameters.Add(p8);
 
      byte []barr = new byte[3];
      barr[0] = (byte)'X';
      barr[1] = (byte)'Y';
      barr[2] = (byte)'Z';
 
      DB2eParameter p9 = new DB2eParameter("@p9", DB2eType.Blob);
      p9.Value = barr;
      cmd.Parameters.Add(p9);
 
      // ejecutar el mandato preparado
      cmd.ExecuteNonQuery();
   } 
   catch (DB2eException e1)
   { 
      for (int i=0; i < e1.Errors.Count; i++)
      { 
         Console.WriteLine("Error #" + i + "\n" +
            "Message: " + e1.Errors[i].Message + "\n" +
            "Native: " + e1.Errors[i].NativeError.ToString() + "\n" +
            "SQL: " + e1.Errors[i].SQLState + "\n");
      } 
   } 
   catch (Exception e2)
   { 
       Console.WriteLine(e2.Message);
   } 
     finally
   { 
      if (conn != null && conn.State != ConnectionState.Closed)
      { 
            conn.Close();
            conn = null;
      } 
   } 
} 
 
 

Conceptos relacionados