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.
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 ... }
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(); } }
[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