HTMLpointHTMLpoint HTMLpoint.com


 DBI: métodos diversos



Concluimos el repaso de métodos con una serie de ellos que no hemos citado antes pero que, de todos modos, pueden resultar útiles.

El primer método que vamos a analizar es "available_drivers", que nos señala los driver que están presentes en el sistema. Para verlos, podemos usar:

@driver_names = DBI->available_drivers;
foreach $driver(@driver_names) {
print $driver,"\n"
}


que irá a buscar en el directorio DBD::* y en el interior de array @INC todos los driver instalados en el sistema; con el print, éstos se mostrarán uno por línea en vídeo.

El segundo método es "data_sources", que sera capaz de decirnos los nombres de todas las bases de datos presentes en nuestro sistema. Se puede utilizar como sigue:

@db = DBI->data_sources(Pg);
foreach $element(@db) {
print $element, "\n"
}

Fijaos en ese "Pg" después del nombre del método: éste le dirá al script que nos ofrezca sólo los nombres de las bases de datos Postgres presentes en el sistema.

Otro metodo útil es "trace", que nos permite ver en un file (¡aconsejado!) lo que sucede en la base de datos; en efecto, escribiendo:

DBI->trace($trace_level, $log_file);

le diremos al script que escriba en el file $log_file lo que sucede en la base de datos.
$trace_level es la profundidad del logging: "0" está desabilitado, "1" recoge las llamadas a los métodos, etc., hasta llegar a "5", que es el nivel máximo de profundidad. Hay que tener cuidad para no utilizar inútilmente una profundidad demasiado elevada, dejando fuera del script el equivalente di "SELECT * FROM direcciones" que hemos visto más arriba, el file de log resulta de 377 líneas contra las 39 del logging situado sobre "1". Y recordamos la sencillez de la base de datos.

Un ejemplo práctico podría ser:

DBI->trace("1", "/tmp/db");

seguido por el resto del código. Atención también a otra cosa: el logging escribe en append en el file de log, por lo tanto, una vez más, estad atentos a las dimensiones del file resultante.

Otro método útil es "ping", que permite ver a distancia si una base de datos está en la linea y es accesible o si todavía se está conectado a éste.

La sintaxis es simplemente:

$ping = $db->ping;

que volverá a "true" en el caso de que se pueda acceder a la base de datos. Fijaos en cómo el método "ping" es parecido al comando de sistema ping.

$rows = $statement->rows es un simple método que nos dice cuántas columnas serán afectadas por el método preparado y ejecutado con anterioridad. Considead el siguiente codigo:

my $stat = $db->prepare( q{
SELECT nombre, apellido, email
FROM direcciones
WHERE nombre='Mario'
}) || die "Can't prepare statement: $DBI::errstr";
my $return = $stat->execute;
$rows=$stat->rows;
print $rows;


dará como rfesultado "1"; si, en cambio, empleásemos:

my $stat = $db->prepare( q{
SELECT nombre, apellido, email
FROM direcciones
WHERE nombre='aaaaa'
}) || die "Can't prepare statement: $DBI::errstr";
my $return = $stat->execute;
$rows=$stat->rows;
print $rows;

nos esperaremos, como de hecho ocurrirá, que el output sea cero.

Un método parecido, pero que incluso restituirá los datos de una línea es "dump_result"; se puede usar como sigue:

my $stat = $db->prepare( q{
SELECT nombre, apellido, email
FROM direcciones
WHERE nombre='Mario'
}) || die "Can't prepare statement: $DBI::errstr";
my $return = $stat->execute;

$rows=$stat->dump_results;
print $rows;


che darà come output:

'Mario', 'Rossi', 'mario@rossi.com'
1 rows



[ Attributi ]
  Torna a inizio pagina