"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
-------- --------- --------
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);
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.
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.