Herramientas de usuario

Herramientas del sitio


es:manual:items:generativos:bases_de_datos

Uso de bases de datos

A veces las tablas son demasiado grandes para poder meterlas en un único fichero, o bien se tiene acceso a un conjunto de dato estructurado en una base de datos. En este caso, en vez de usar la clase siette.util.corpus.Table se utiliza una subclase siette.util.corpus.DatabaseTable que permite acceder a la base de datos directamente.

La ventaja y el inconveniente de usar bases de datos es que la información puede contenida puede cambiar dinámicamente, sin que Siette tenga conocimiento de esos cambios, por lo que las preguntas que se generarón a partir de una cierta semilla, pueden variar a lo largo del tiempo.

Ejemplo 1

<%
   DatabaseTable db = new DatabaseTable("demo/bio/dbpedia.properties");
   db.setPassword("*******");
 
   db.setTableName("ANIMALES");
   db.setKey("BINOMIAL");
   db.addWhere("NOMBRE IS NOT NULL AND CLASSIS = 'Mammalia'");
 
   String[] animal db.select();   
 
   String img = db.get( animal, "IMG" );
   String binomial = db.get( animal, "BINOMIAL" );
   String animal_name = db.get( animal, "NOMBRE" );
          animal_name = new String (animal_name.getBytes(), "iso-8859-1");
   ...
%>
   <center>
   <IMG src="<%= img %>" width="400" /><br/>
   ¿Que animal es éste? 
   </center>

Este ejemplo muestra el enunciado de una pregunta en la que se muetra la imagen de un animal y se pide su nombre. La base de datos de la que se obtiene la información se ha construido a partir de los datos existentes en la dbpedia, que se han almacenado localmente.

Los datos de la conexión a la base de datos que contiene esta información se especifican en el fichero demo/bio/dbpedia.properties, salvo la contraseña, que por razones de seguridad se establece mediante el método setPassword() en la propia pregunta. El contenido del fichero es el siguiente:

 dbms=postgres
 ip=192.168.169.140
 puerto=5432
 usuario=dbpedia
 sid=dbpedia

Las siguientes instrucciones componen una sentencia SELECT del lenguaje SQL mediante instrucciones que fijan el nombre de la tabla, el criterio de ordenación y la condición. Estos métodos auxiliares eximen al programador no experto en bases de datos de la necesidad de componer la sentencia SELECT manualmente. La sentencia resultante es la siguiente:

 SELECT * 
 FROM ANIMALES
 WHERE NOMBRE IS NOT NULL AND CLASSIS = 'Mammalia'

Una vez realizada la consulta, que se ejecuta al invocar al método select() el resto de la programación es similar al uso de tablas. El resultado tras instanciar esta plantilla es:

Se puede hacer uso de los mmétodos de seleccion como selectSet y 'selectAll'' indicando los valores de los atributos que se quiera utilizar en la consulta y el sistema construye automaticamente la consulta SQL correspondiente. Por ejemplo:

  String[][] tabla = db.selectAll("CLASSIS", new String[] {"Mamalia", "Aves"}, Table.ANY,
                                  "HABITAT", new String[] {"Acuatico"}, Table.ANY);

construirria la consulta:

 SELECT * 
 FROM ANIMALES
 WHERE (CLASSIS = 'Mammalia' OR CLASSIS = 'Aves') 
       AND NOT (HABITAT = 'Acuatico')
       

en el caso de que la correspondencia fuera exacta, previa llamada a la función setExactMatch, o bien:

 SELECT * 
 FROM ANIMALES
 WHERE (CLASSIS LIKE '%Mammalia%' OR CLASSIS LIKE '%Aves%') 
       AND NOT (HABITAT LIKE '%Acuatico%')
       

en caso de que se haya configurado la tabla con setPartialMatch

es/manual/items/generativos/bases_de_datos.txt · Última modificación: 2021/05/27 12:13 por root

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki