viernes, 1 de diciembre de 2017

RESULTSET

                                                                                    
                                                                                  


                                           "AÑO DEL BUEN SERVICIO AL CIUDADANO"


                          ESCUELA ACADÉMICA INGENIERÍA DE SISTEMAS Y TELEMÁTICA


                                                                    ASIGNATURA

                                              LABORATORIO DE PROGRAMACIÓN II


                                                                           TEMA

                                                         JAVA CON BASE DE DATOS

                                                                         AUTORES

                                                   RAMOS FERNÁNDEZ SONIA ELVIRA


                                                                         DOCENTE

                                            ING. MARCO AURELIO PORRO CHULLI


                                                    BAGUA GRANDE-UTCUBAMBA

                                                                        AMAZONAS 

                                                                               2017


1.     CONTENIDO.
v    DEFINICION:

El objeto ResultSet proporciona varios métodos para obtener los datos de columna correspondientes a una fila. Todos ellos tienen el formato get<Tipo>, siendo <Tipo> un tipo de datos Java. Algunos ejemplos de estos métodos son getInt, getLong, getString, getTimestamp y getBlob.

Los ResultSet son cursores de base de datos rápidos que admiten el enlace de datos de interfaz de usuario, el desplazamiento hacia delante y hacia atrás, y la actualización de datos en la base de datos. Como modelo de conexión permanente, ResultSet mantienen una conexión activa a la base de datos.

Un ResultSet contiene todas las filas que satisfacen las condiciones de una sentencia SQL y proporciona el acceso a los datos de estas filas mediante un conjunto de métodos get que permiten el acceso a las diferentes columnas de la fila. El método ResultSet.next se usa para moverse a la siguiente fila del resultSet, convirtiendo a ésta en la fila actual.

El formato general de un resultSet es una tabla con cabeceras de columna y los valores correspondientes devueltos por la ‘query’. Por ejemplo, si la ‘query’ es SELECT a, b, c FROM Table1, el resultado tendrá una forma semejante a:

a b c
-------- --------- --------
12345 Cupertino CA
83472 Redmond WA
83492 Boston MA

El siguiente fragmento de código es un ejemplo de la ejecución de una sentencia SQL que devolverá una colección de filas, con la columna 1 como un int, la columna 2 como una String y la columna 3 como un array de bytes:

java.sql.Statement stmt = conn.createStatement();
ResultSet r = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (r.next())
{
// print the values for the current row.
int i = r.getInt("a");
String s = r.getString("b");
float f = r.getFloat("c");
System.out.println("ROW = " + i + " " + s + " " + f);

Filas y Cursores:

Un ResultSet mantiene un cursor que apunta a la fila actual de datos. El cursor se mueve una fila hacia abajo cada vez que se llama al método next. Inicialmente se sitúa antes de la primera fila, por lo que hay que llamar al método next para situarlo en la primera fila convirtiéndola en la fila actual. Las filas de ResultSet se recuperan en secuencia desde la fila más alta a la más baja.
Un cursor se mantiene válido hasta que el objeto Resultset o su objeto padre Statement se cierra.

En SQL, el cursor resultado para una tabla tiene nombre. Si una base de datos permite updates posicionados o deletes posicionados, el nombre del cursor es necesario y debe ser proporcionado como un parámetro del comando update o delete. El nombre del cursor puede obtenerse mediante una llamada al método getCursorName.

No todas las bases de datos soportan updates o deletes posicionados. Los métodos DatabaseMetaData.supportsPositionedDelete y DatabaseMetaData.supportsPositionedUpdate nos permiten descubrir si estas operaciones están soportadas en una conexión dada. Cuando lo están, el driver o la DBMS deben asegurarse de que las filas seleccionadas están apropiadamente bloquedas y por tanto que estas operaciones no provoquen actualizaciones anómalas ni otros problemas de concurrencia.

Columnas:

Los métodos getXXX suministran los medios para recuperar los valores de las columnas de la fila actual. Dentro de cada fila, los valores de las columnas pueden recuperarse en cualquier orden, pero para asegurar la máxima portabilidad, deberían extraerse las columnas de izquierda a derecha y leer los valores de las columnas una única vez.

Puede usarse o bien el nombre de la columna o el número de columna para referirse a esta. Por ejemplo: si la columna segunda de un objeto RecordSet rs se denomina “title” y almacena valores de cadena, cualquiera de los dos ejemplos siguientes nos devolverá el valor almacenado en la columna.

String s = rs.getString("title");
String s = rs.getString(2);

Nótese que las columnas se numeran de izquierda a derecha comenzando con la columna 1. Además los nombres usados como input en los métodos getXXX son insensibles a las mayúsculas.

La opción de usar el nombre de columna fue provista para que el usuario que especifica nombres de columnas en una ‘query’ pueda usar esos nombres como argumentos de los métodos getXXX. Si, por otro lado, la sentencia select no especifica nombres de columnas (tal como en “select * from table1” o en casos donde una columna es derivada), deben usarse los números de columna. En estas situaciones, no hay forma de que el usuario sepa con seguridad cuales son los nombres de las columnas.

En algunos casos, es posible para una query SQL devolver un resultSet con más de una columna con el mismo nombre. Si se usa el nombre de columna como argumento en un método getXXX, éste devolverá el valor de la primera columna que coincida con el nombre. Por eso, si hay múltiples columnas con el mismo nombre, se necesita usar un índice de columna para asegurarse que se recupera el valor de la columna correcta. Esto puede ser ligeramente más eficiente que usar los números de columna.
Información acerca de las columnas en un ResultSet es accesible mediante el método ResultSet.getMetaData. El objeto ResultSetMetaData devuelto nos da el número, tipo y propiedades de las columnas de los objetos ResultSet.
Si se conoce el nombre de una columna, pero no su índice, puede usarse el método findColumn para encontrar el número de columna.

v    PROPIEDADES:

MaxMultiLineTextLength

Establece o devuelve el límite actual de longitud de datos obtenido de un campo de texto de varias líneas. El límite se aplica a los campos de serie cortos así como también a los campos de texto de varias líneas.

SINTAXIS:

resultset.MaxMultiLineTextLength
resultset.MaxMultiLineTextLength max_length

MaxResultSetRows

Establece o devuelve el límite inicial sobre el número de registros que se incluirá en el conjunto de resultados cuando se ejecuta una consulta.

SINTAXIS:

resultset.MaxResultSetRows
resultset.MaxResultSetRows limit

RecordCount

Devuelve el recuento de registros (número de filas) del conjunto de resultados.

SINTAXIS:

resultset.RecordCount

v    EJEMPLOS:

1.            Un ejemplo de cómo podemos usar un objeto ResultSet es:

Statement stmt = null;
try {
   stmt = conn.createStatement( );
   ResultSet rs= stmt.executeQuery("SELECT nombre, apellido FROM usuario");

   while(rs.next()){
       String nom=rs.getString(1);
       String ape=rs.getString("apellido");
   }
}
catch (SQLException e) {
}
finally {
   stmt.close();
   conn.close();
}

De esta forma vemos cómo podemos obtener los valores devueltos por la consulta, y además vimos cómo obtener dicho valor conociendo el número de la columna o el nombre de la columna. Usamos un loop, en este caso while, para ir recorriendo fila a fila todo el objeto ResultSet e ir sacando el nombre y el apellido de todos los registros obtenidos a partir de la consulta.

2.            Éste es un ejemplo de cómo utilizar la interfaz ResultSet

import java.sql.*;

/**
ResultSetExample.java
Este programa muestra la utilización de ResultSetMetaData y ResultSet para visualizar todos los datos de una tabla aunque el programa que obtiene los datos no sabe cuál es el aspecto que tendrá la tabla (el usuario pasa los valores correspondientes a la tabla y a la biblioteca).
**/
public class ResultSetExample {

    public static void main(java.lang.String[] args)
    {
        if (args.length != 2) {
            System.out.println("Uso:  java ResultSetExample <biblioteca> <tabla>");
            System.out.println(" siendo <biblioteca> la biblioteca que contiene la <tabla>");
            System.exit(0);
        }

        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        ResultSetMetaData rsmd = null;

        try {
            // Obtener una conexión a base de datos y preparar una sentencia.
            Class.forName("com.ibm.db2.jdbc.app.DB2Driver");
            con = DriverManager.getConnection("jdbc:db2:*local");

            s = con.createStatement();

            rs = s.executeQuery("SELECT * FROM " + args[0] + "." + args[1]);
            rsmd = rs.getMetaData();

            int colCount = rsmd.getColumnCount();
            int rowCount = 0;
            while (rs.next()) {
                rowCount++;
                System.out.println("Datos para la fila " + rowCount);
                for (int i = 1; i <= colCount; i++)
                    System.out.println("   Fila " + i + ": " + rs.getString(i));
            }

        } catch (Exception e) {
            // Manejar los errores.
            System.out.println("Tenemos un error... ");
            e.printStackTrace();
        } finally {
            // Hay que asegurarse de que siempre se haga
            // el borrado. Si la conexión se cierra, la
// sentencia que hay debajo de ella también se cerrará.
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    System.out.println("Error grave: no se puede cerrar el objeto conexión");
                }
            }
        }
    }
}

2.          RESUMEN:

Qué es y cómo podemos usar un objeto ResultSet, como ya vimos anteriormente, un objeto Connection realiza la conexiona a la Base de Datos y con ayuda de un objeto Statement realiza consultas, entre otras sentencias, dichas consultas nos devuelven un conjunto de resultados, estos resultados son almacenados en un objeto tipo ResultSet, el cual veremos en el dia de hoy.
Una vez obtenido el objeto ResultSet procedemos a extraer la información que obtuvimos de la consulta a la Base de Datos, para hacer esto hacemos uso de los métodos y funciones del objeto ResultSet tales como next (), first(), last(), etc., que nos sirve para movernos entre las diferentes filas del conjunto de resultados.
Adicionalmente esta clase nos ofrece una gran variedad de métodos para obtener los valores de los campos del conjunto de resultados obtenidos por la consulta que se realizó, por ejemplo si necesitamos obtener un valor entero, tenemos el método getInt (), con dos variantes la primer getInt (int x) donde x es el número de la columna de la consulta retornada o getInt (String nombre) donde nombre es el nombre de la columna de la consulta retornada. De esta forma obtenemos el valor almacenado en esa columna para la fila actual. Luego pasamos a la siguiente fila usando el método next () y así hasta que no hayan más filas.

3.          SUMMARY:

Today we will see what it is and how we can use a ResultSet object, as we saw earlier, a Connection object connects to the Database and with the help of a Statement object makes queries, among other statements, these queries return a set of results , these results are stored in a ResultSet type object, which we will see today.

Once obtained the ResultSet object we proceed to extract the information that we obtained from the query to the Database, to do this we make use of the methods and functions of the ResultSet object such as next (), first (), last (), etc. , which helps us move between the different rows of the result set.

Additionally this class offers us a great variety of methods to obtain the values ​​of the fields of the set of results obtained by the query that was made, for example if we need to obtain an integer value, we have the method getInt (), with two variables the first getInt (int x) where x is the number of the column of the returned query or getInt (String name) where name is the name of the column of the returned query. In this way we obtain the value stored in that column for the current row. Then we move to the next row using the next () method and so on until there are no more rows.

4.          RECOMENDACIONES:

v  Se recomienda declarar un objeto de la clase ResultSet para poder obtener las consultas que le hayamos dicho que nos muestre.

v Si abrimos el objeto ResultSet tenemos que cerrar inmediatamente el ResultSet, liberando los recursos utilizados: public abstract void close() throws SQLException.

v Para que el ResultSet, no se congestione o entienda más rápido, en las consultas deberíamos utilizar los campos específicos en vez del.

v Se recomienda usar esta clase para poder obtener los datos de una tabla mediante métodos ofrecidos por el ResultSet que luego los obtendrás en un formulario.

5.          CONCLUSIONES:

La variable Resultset fue declarada fuera de todos los métodos, es decir son globales y pueden verse en toda la clase no importa en qué proceso lo utilizemos, es sencillo recordemos algo de teoria, toda funcion retorna un valor en que se utiliza respectivamente para procesar Resultados.
Todas la variables de conexion (cn), Statement (St) y ResultSet(reg) fueron declaradas fuera de todos los metodos, es decir son globales y pueden verse en toda la clase no importa en qué proceso lo utilizemos, y para saldar la duda, anteriormente dije que todos estos son metodos, asi es pero por que ejecutar y consulta los llame funciones, es sencillo recordemos algo de teoria, toda funcion retorna un valor es por ello que se le llama funciones a ejecutar y a consulta por que regresan el valor de la variable error y reg respectivamente.

6.          LINKOGRAFIAS.

sábado, 21 de octubre de 2017

JAVA CON BASE DATOS


                                         "AÑO DEL BUEN SERVICIO AL CIUDADANO"

                          ESCUELA ACADÉMICA INGENIERÍA DE SISTEMAS Y TELEMÁTICA


                                                                    ASIGNATURA

                                              LABORATORIO DE PROGRAMACIÓN II


                                                                           TEMA

                                                         JAVA CON BASE DE DATOS

                                                                         AUTORES

                                                     AGUILAR CORDOVA JHAKELIN

                                                   RAMOS FERNÁNDEZ SONIA ELVIRA


                                                                         DOCENTE

                                            ING. MARCO AURELIO PORRO CHULLI


                                                    BAGUA GRANDE-UTCUBAMBA

                                                                        AMAZONAS 

                                                                               2017


JAVA CON BASE DATOS

1.    CONTENIDO

1.1 DEFINICION

JDBC es un API de Java para acceder a sistemas de bases de datos, y prácticamente a cualquier tipo de dato tabular. El API JDBC consiste de un conjunto de clases e interfaces que permiten a cualquier programa Java acceder a sistemas de bases de datos de forma homogénea. Al igual que ODBC, la aplicación de Java debe tener acceso a un controlador (driver) JDBC adecuado. Este controlador es el que implementa la funcionalidad de todas las clases de acceso a datos y proporciona la comunicación entre el API JDBC y la base de datos real. De manera muy simple, al usar JDBC se pueden hacer tres cosas:
·         Establecer una conexión a una fuente de datos (ejemplo. Una base de datos).
·         Mandar consultas y sentencias a la fuente de datos.
·         Procesar los resultados.

La necesidad de una librería



Al trabajar con JDBC resulta necesario agregar un jar al proyecto que contiene las clases necesarias que se utilizan para “dialogar” con un DBMS. Cada DBMS tiene su propio archivo jar. Estos archivos se pueden obtener de:

      -
http://developers.sun.com/product/jdbc/drivers

También es posible conseguir estos archivos jar en la página web correspondiente a cada DBMS, por ejemplo, en caso de usar DMBS Oracle es posible buscarlo en la página de Oracle: 
www.oracle.com. En nuestro caso vamos a usar el jar de mysql, el mysql connector y lo podemos descargar desde acá:


Dentro del zip que se descarga se encuentra el jar.

CARGAR EL CONTROLADOR  JDBC

Para trabajar con el API JDBC se tiene que importar el paquete java.sql, tal y como se indica a continuación:

Import java.sql.*;

En este paquete se definen los objetos que proporcionan toda la funcionalidad que se requiere para el acceso a bases de datos. El siguiente paso después de importar el paquete java.sql consiste en cargar el controlador JDBC, es decir un objeto Driver específico para una base de datos que define cómo se ejecutan las instrucciones para esa base de datos en particular.

Hay varias formas de hacerlo, pero la más sencilla es utilizar el método forname() de la claseclass:

Class.forname("Controlador JDBC");

Para el caso particular del controlador para sqlserver, Connector/J, se tiene lo siguiente:

Class.forname("com.mysql.jdbc.Driver ");

Debe tenerse en cuenta que el método estático forname() definido por la clase Class genera un objeto de la clase especificada. Cualquier controlador JDBC tiene que incluir una parte de iniciación estática que se ejecuta cuando se carga la clase. En cuanto el cargador de clases carga dicha clase, se ejecuta la iniciación estática, que pasa a registrarse como un controlador JDBC en el drivermanager.

Para la base de datos csl creada anteriormente, el URL sería:

String url = "jdbc:mysql://localhost/agendita";

Una vez que se ha determinado el URL, se puede establecer una conexión a una base de datos.



1.2   OBJETOS CONNECTION, STATEMENT Y RESULTSET



v  OBJETOS CONNECTION

El objeto Connection es el principal objeto utilizado para proporcionar un vínculo entre las bases de datos y una aplicación en Java. Connection proporciona métodos para manejar el procesamiento de transacciones, para crear objetos y ejecutar instrucciones SQL, y para crear objetos para la ejecución de procedimientos almacenados.

Se puede emplear tanto el objeto Driver como el objeto drivermanager para crear un objeto Connection. Se utiliza el método connect() para el objeto Driver, y el método getconnection()para el objeto drivermanager.


El objeto Connection proporciona una conexión estática a la base de datos. Esto significa que hasta que se llame en forma explícita a su método close() para cerrar la conexión o se destruya el objeto Connection, la conexión a la base de datos permanecerá activa.

La manera más usual de establecer una conexión a una base de datos es invocando el método getconnection() de la clase drivermanager. A menudo, las bases de datos están protegidas con nombres de usuario (login) y contraseñas (password) para restringir el acceso a las mismas. El método getconnection() permite que el nombre de usuario y la contraseña se pasen también como parámetros.

String usuario = "root";
String contraseña = "123456789";
Connection conn = drivermanager.getconnection(url,usuario,contraseña);


En toda aplicación de bases de datos con mysql es indispensable poder establecer la conexión al servidor para posteriormente enviarle las consultas. Los programas en Java no son la excepción. El siguiente código va a servir para verificar que podemos establecer una conexión a la base de datos agendita.

CREACIÓN DE SENTENCIAS

El objeto Connection permite establecer una conexión a una base de datos. Para ejecutar instrucciones SQL y procesar los resultados de las mismas, se debe hacer uso de un objetostatement.



v  OBJETOS STATEMENT

Los objetos Statement envían comandos SQL a la base de datos, y pueden ser de cualquiera de los tipos siguientes:
·         Un comando de definición de datos como CREATE TABLE o CREATE INDEX.
·         Un comando de manipulación de datos como INSERT, DELETE o UPDATE.
·         Un sentencia SELECT para consulta de datos.

Un comando de manipulación de datos devuelve un contador con el número de filas (registros) afectados, o modificados, mientras una instrucción SELECT devuelve un conjunto de registros denominado conjunto de resultados (result set). La interfaz Statement no tiene un constructor, sin embargo, podemos obtener un objeto Statement al invocar el método createstatement() de un objeto Connection.

Conn = drivermanager.getconnection(url,login,pasword);

Statement stmt = conn.createstatement();

Una vez creado el objeto Statement, se puede emplear para enviar consultas a la base de datos usando los métodos execute(), executeupdate() o executequery(). La elección del método depende del tipo de consulta que se va a enviar al servidor de bases de datos:

Método
Descripción
Execute( )
Se usa principalmente cuando una sentencia SQL regresa varios conjuntos de resultados. Esto ocurre principalmente cuando se está haciendo uso de procedimientos almacenados.
Executeupdate( )
Este método se utiliza con instrucciones SQL de manipulación de datos tales como INSERT, DELETE o UPDATE.
Executequery( )
Se usa en las instrucciones del tipo SELECT.

Es recomendable que se cierren los objetos Connection y Statement que se hayan creado cuando ya no se necesiten. Lo que sucede es que cuando en una aplicación en Java se están usando recursos externos, como es el caso del acceso a bases de datos con el API JDBC, el recolector de basura de Java (garbage collector) no tiene manera de conocer cuál es el estado de esos recursos, y por lo tanto, no es capaz de liberarlos en el caso de que ya no sean útiles. Lo que ocurre en estos casos es que se pueden quedar almacenados en memoria grandes cantidades de recursos relacionados con la aplicación de bases de datos que se está ejecutando. Es por esto que se recomienda que se cierren de manera explícita los objetos Connection y Statement.
De manera similar a Connection, la interfaz Statement tiene un método close() que permite cerrar de manera explícita un objeto Statement. Al cerrar un objeto Statement se liberan los recursos que están en uso tanto en la aplicación Java como en el servidor de bases de datos.
Statement stmt = conn.createstatement();
  
   ....

   Stmt.close();

EJECUCIÓN DE CONSULTAS

Cuando se ejecutan sentencias SELECT usando el método executequery(), se obtiene como respuesta un conjunto de resultados, que en Java es representado por un objeto resultset.

Statement stmt = conn.createstatement();

v  OBJETOS RESULTSET

Resultset res = stmt.executequery("SELECT * FROM estudiante");

Se puede pensar en un conjunto de resultados como una tabla ( filas y columnas ) en la que están los datos obtenidos por una sentencia SELECT.

La información del conjunto de resultados se puede obtener usando el método next() y los diversos métodos getxxx() del objeto resultset. El método next() permite moverse fila por fila a través del resultset, mientras que los diversos métodos getxxx() permiten accesar a los datos de una fila en particular.

Los métodos getxxx() toman como argumento el gndice o nombre de una columna, y regresan un valor con el tipo de datos especificado en el método. Así por ejemplo, getstring() regresará una cadena, getboolean() regresará un booleano y getint() regresará un entero. Cabe mencionar que estos métodos deben tener una correspondencia con los tipos de datos que se tienen en el resultset, y que son a las vez los tipos de datos provenientes de la consulta SELECT en la base de datos, sin embargo, si únicamente se desean mostrar los datos se puede usar getstring() sin importar el tipo de dato de la columna.

Por otra parte, si en estos métodos se utiliza la versión que toma el índice de la columna, se debe considerar que los índices empiezan a partir de 1, y no en 0 (cero) como en los arreglos, los vectores, y algunas otras estructuras de datos de Java.

Existe un objeto resultsetmetadata que proporciona varios métodos para obtener información sobre los datos que están dentro de un objeto resultset. Estos métodos permiten entre otras cosas obtener de manera dinámica el número de columnas en el conjunto de resultados, así como el nombre y el tipo de cada columna.

Resultset res = stmt.executequery("SELECT * FROM estudiante");
Resultsetmetadata metadata = res.getmetadata();

1.3 EJEMPLOS

CONNECTION
Import java.sql.*;

public class conexionbd
{
   static String bd = "sesion";
   static String login = "root";
   static String password = "123456789";
   static String url = "jdbc:mysql://localhost/"+bd;

   Public static void main(String[] args) throws Exception
   {
      Connection conn = null;

      try
      {
         Class.forname("com.mysql.jdbc.Driver").newinstance

         conn = drivermanager.getconnection(url,login,password);

         if (conn != null)
         {
            System.out.println("Conexiónse de datos "+url+" ... Ok");
            conn.close();
         }
      }
      catch(sqlexception ex)
      {
         System.out.println(ex);
      }
      catch(classnotfoundexception ex)
      {
         System.out.println(ex);
      }

   }
}


STATEMENT Y RESULTSET

         // Define la conexión

         Connection laconexion = administradordeconexiones.getconnection();       

        // Arma la consulta y la ejecuta

       String laconsulta = "SELECT * FROM alumnos";

        Statement stmtconsulta = laconexion.createstatement();

        resultset rs = stmtconsulta.executequery(laconsulta);       

        // Muestra los datos

        while( rs.next() )
        System.out.println( "ID: " + rs.getint("alu_id") + " -- " + "Nombre: " + rs.getstring("alu_nombre") + " -- " + "Apellido: " + rs.getstring("alu_apellido") );       

        // Cierra el Statement y la Connection

        stmtconsulta.close();
        laconexion.close();



2.   RESUMEN

Java es un potente y versátil lenguaje de programación que puede trabajar en todo tipo de entornos, desde servidores de aplicaciones mi ddle-tier hasta clientes Web. Independientemente del tipo de aplicación que usted desarrolle y del tipo de máquina en la que se ejecute el código, su aplicación seguramente tendrá que acceder a datos almacenados en algún tipo de base de datos. Las bases de datos relacionales son la elección obvia en la mayor parte de las empresas, y han evolucionado espectacularmente en los últimos años hasta convertirse en potentes sistemas de gestión de bases de datos.

En este tema se pretende mostrar cómo funcionan las bases de datos relacionales, y como emplear la interfaz JDBC para utilizarlas en sus programas Java. Se recogen desde los fundamentos básicos de SQL y dichas bases.

También veremos las sentencias DML de SQL que se utiliza en JAVA, acompañado de algunos ejemplos para su respectivo uso.

Adicionalmente mostraremos cuales son las funciones de Objetos Connection, Statement y resulset, donde se mostrarán algunos ejemplos de su uso.


3.   SUMMARY

Java is a powerful and versatile programming language that can work in all kinds
of environments, from my ddle-tier application servers to Web clients. Regardless 
of the type of application you develop and the type of machine running the code, 
your application will surely have to access data stored in some type of database. 
Relational databases are the obvious choice in most companies, and have evolved 
dramatically in recent years to become powerful database management systems.
 
This topic is intended to show how relational databases work, and how to use the 
JDBC interface to use them in your Java programs. They are collected from the 
basics of SQL and such databases.
 
We will also see the SQL DML statements that are used in JAVA, accompanied by 
some examples for their respective use.
 
Additionally we will show what are the functions of Objects Connection, Statement 
and resulset, which will show some examples of its use.

4.   RECOMENDACIONES

Evitar consultas SQL SELECT *


SELECT * FROM... Es una forma muy habitual de establecer una consulta en SQL. Sin embargo, muchas veces no es necesario consultar todos los campos. Para cada columna que hay que devolver, el controlador JDBC tiene que hacer el trabajo adicional de enlazar y devolver la fila. Aún en el caso de que la aplicación no llegue a utilizar nunca una columna concreta, el controlador JDBC debe tenerla presente y reservar espacio por si se utiliza. Esta cuestión no supone una actividad general significativa si son pocas las columnas que no se utilizan de las tablas. Sin embargo, si son numerosas las columnas no utilizadas, la actividad general puede llegar a ser significativa. En tal caso, sería mejor listar individualmente las columnas que a la aplicación le interesa consultar, como en este ejemplo:
     SELECT COL1, COL2, COL3 FROM...
 

Utilizar getxxx(int) en vez de getxxx(String)


Utilice los métodos getxxx de resultset que toman valores numéricos, en vez de las versiones que toman nombres de columna. Si bien la libertad que supone utilizar nombres de columna en vez de constantes numéricas parece ser una ventaja, la base de datos propiamente dicha solo sabe manejar los índices de las columnas. Por ello, cada vez que se llama a un método getxxx utilizando el nombre de una columna, el controlador JDBC lo debe resolver para que el método se pueda pasar a la base de datos. Normalmente, a los métodos getxxx se les suele llamar dentro de bucles que se pueden ejecutar millones de veces, y ello provocaría rápidamente la acumulación de la pequeña actividad general que supone la resolución de cada uno de los nombres de columna.
 

Evitar llamadas a getobject para tipos Java primitivos


Cuando de la base de datos se obtienen valores de tipos primitivos (int, long, float, etc.), es más rápido utilizar el método get específico del tipo primitivo (getint, getlong, getfloat) que utilizar el método getobject. La llamada a getobject realiza el trabajo de obtener el tipo primitivo y luego crea un objeto para devolverlo. Normalmente, esto se hace en los bucles, lo que supone crear millones de objetos de corta vida. Si se emplea getobject para los mandatos de primitivos, existe el inconveniente adicional de que se activa con frecuencia el colector de basura, lo que aún reduce más el rendimiento.

Cerrar explícitamente los recursos JDBC cuando ya no se necesitan


La aplicación debe cerrar explícitamente los objetos resultset, Statement y Connection cuando ya no se necesitan. Así se hace una limpieza de recursos del modo más eficaz posible, y el rendimiento puede aumentar. Además, los recursos de base de datos que no se cierran de manera explícita pueden provocar fugas de recursos, y los bloqueos de base de datos se pueden prolongar más de lo debido. Ello puede producir anomalías de aplicación o reducir la concurrencia en las aplicaciones.

 

5.   CONCLUSIONES

 Establecer una conexión a una fuente de datos (ej. Una base de datos).
Mandar consultas y sentencias a la fuente de datos.
Procesar los resultados.

      Al trabajar con JDBC resulta necesario agregar un jar al proyecto que contiene las                clases   necesarias que se utilizan para “dialogar” con un DBMS. Cada DBMS tiene su          propio archivo jar. Estos archivos se pueden obtener de:



También es posible conseguir estos archivos jar en la página web correspondiente a cada DBMS, por ejemplo, en caso de usar DMBS Oracle es posible buscarlo en la página de Oracle: www.oracle.com. En nuestro caso vamos a usar el jar de mysql, el mysql connector y lo podemos descargar desde acá:



6.   GLOSARIO DE TÉRMINOS

API: Una API es un conjunto de funciones y procedimientos que cumplen una o muchas funciones con el fin de ser utilizadas por otro software. Las siglas API vienen del inglés Application Programming Interface. En español sería Interfaz de Programación de Aplicaciones.

ODBC: Open database Connectivity (ODBC) es un estándar de acceso a las bases de datos desarrollado por SQL Access Group (SAG) en 1992. El objetivo de odbces hacer posible el acceder a cualquier dato desde cualquier aplicación, sin importar qué sistema de gestión de bases de datos (DBMS) almacene los datos.

DRIVER: Controlador, rutina o programa que enlaza un dispositivo periférico al sistema operativo.

JAR: Un archivo JAR (por sus siglas en inglés, Java archive) es un tipo de archivo que permite ejecutar aplicaciones escritas en el lenguaje Java. Las siglas están deliberadamente escogidas para que coincidan con la palabra inglesa "jar" (tarro).

DRIVERMANAGER: drivermanager es una clase estática en Java 2 Software Development Kit (J2SDK).drivermanager gestiona el conjunto de controladores Java Database Connectivity (JDBC) que están disponibles para que los utilice una aplicación.

GETCONNECTION: Para crear una conexión a una base de datos o un servidor de bases de datos IBM® Informix, puede utilizar el método drivermanager.getconnection(). Este método crea un objeto Connection, que se utiliza para crear sentencias SQL, enviarlas a la base de datos Informix y procesar los resultados.

SELECT: Para realizar consultas sobre las tablas de las bases de datos disponemos de la instrucción SELECT. Con ella podemos consultar una o varias tablas. Es sin duda el comando más versátil del lenguaje SQL. Existen muchas cláusulas asociadas a la sentenciaselect (GROUP BY, ORDER, HAVING, UNION).

INTERFAZ: Dispositivo capaz de transformar las señales generadas por un aparato en señales comprensibles por otro.

GETINT: El método getint especifica este método getint en la interfaz java.sql.callablestatement. Este método solamente se admite en los tipos de datos SQL Server que pueden devolver de forma segura un valor entero como int, smallint, tinyint y bit.

7.   BIBLIOGRAFÍA







 Link de las diapositivas: