Vous êtes sur la page 1sur 9

<html>

<head>

<h2 align=center>
universidad de panam�
<br>
facultad de inform�tica electronica y comunicaciones
<br>
licenciatura en inform�tica<br>
para la gestion educativa y empresarial
<br><br>

clases y m�todos involucrados en la conexi�n<br>


y consulta de una base de datos mysql <br>usando java. </h2>
</head>

<body leftmargin="10">
<br>
<br>
<h2 align=left><b>introduccci�n:</b></h2>
<pre face="arial" align=justity size="3">
para una clara comprensi�n de lo que sucede y de lo que necesitamos para hacer
una conexi�n
de una base de datos y para la consulta de la base de dato debemos comprender lo
que es odbc.
jdbc: es un conjunto de clases para la ejecuci�n de sentencias sql. permite
manipular cualquier
base de datos sql.
</pre>

<h2 align=left><b>establecer una conexi�n:</b></h2>


<pre align=justity size="3">
lo que debemos hacer para establecer una conexi�n con el controlador de base de
datos que
queremos utilizar. es aplicar �stos dos pasos:
</pre>
<ol>
<li><font size="+1">cargar el driver</font></li>
<li><font size="+1">hacer la conexi�n</font></li>
</ol>
</pre>
<br>

<h3 align=left>cargar el driver:</h3>

<p face size="4">


<b>m�todo forname():</b></p>

<br>
<pre>
�ste m�todo de la clase class se utiliza para cargar el driver o drivers que
queremos usar,
utilizando s�lo una l�nea de c�digo. si, por ejemplo, queremos utilizar el puente
jdbc-odbc,
se cargar�a la siguiente l�nea de c�digo.
<font color="red">
<br><br>class.forname("sun.jdbc.odbc.jdbcodbcdriver");
</font>

<br>la documentaci�n del driver nos dar� el nombre de la clase a utilizar. por
ejemplo, si
el nombre de la clase es jdbc.driverxyz, cargar�amos el driver con esta l�nea de
c�digo.

<font color="red">
<br>class.forname("jdbc.driverxyz");
</font>

<br>
al hacer esto no necesitamos crear un ejemplar de un driver y registrarlo con el
drivermanager
porque la llamada a class.forname lo hace autom�ticamente. si hubi�ramos creado
nuestro propio
ejemplar, crear�amos un duplicado innecesario, pero no pasar�a nada.
una vez cargado el driver, se procede a realizar la conexi�n

</p>
<h3 align=left>hacer la conexi�N</h3>
<font size="3">
<b><p>drivermanager</p></b>
</font>
<pre>la clase drivermanager permite gestionar todos los drivers instalados en el
sistema.
<b>
<font size="3">
m�Todo:
<br>
<p>getconnection():</p></b>
</font>
utilizado para realizar la conexi�n a la base de datos para as� poder utilizarla.
<br>
<br>

<b><p><u>ejemplo de su uso:</p></u></b>

<font color="red">
connection con = drivermanager.getconnection(�url�, "mylogin", "mypassword");
</font>

como se puede observar el m�todo getconnection utiliza tres par�metros los cuales
son:
<ul>
<li type="circle">la direcci�n url</li>
<li type="circle">el nombre del usuario</li>
<li type="circle">el password del usuario</li>
</ul>

la direcci�n url es una sentencia de caracteres que nos dir� donde se encuentra
ubicada
la base de datos, la cual nos da un puente para poder as� acceder a ella. �sta
secuencia
de caracteres estar� determinada por el tipo de fuente de datos que utilicemos por
ejemplo
si utilizamos la fuente de datos odbc o si utilizamos jdbc, debemos averiguar la
sintaxis
correcta para tener as� nuestra direcci�n url.

<b>login: </b>el nombre del usuario (nombre que se utilizar� para establecer la
conexi�n.
<br>
<b>password: </b>es la password con la que el usuario acceder� a la base de datos.

<font color="red">
string dirurl = "jdbc:odbc:fred";
string nombre = �eric�;
string contrase�a= �123456�;
connection con = drivermanager.getconnection(url, nombre, contrase�a);
</font>
<b>nota: </b>n�tese que tanto la direcci�n url, login y password pueden definirse
con otros
nombres ya que solo son conjuntos de caracteres requeridos para establecer la
conexi�n a la
base de datos.

el m�todo <u>getconnection()</u> devuelve un valor para el objeto de tipo


connection necesario para
verificar que se ha realizado la conexi�n. �ste objeto inicialmente poseer� un
valor nulo o
null, al realizarse correctamente la conexi�n o sea si el url, login y password
son correctos
entonces el objeto indicar� un valor diferente del null el cual nos dice que dicha
conexi�n
se ha realizado correctamente en otro caso permanecer� con un valor null el cual
indica que no est� conectado.

la conexi�n devuelta por el m�todo drivermanager.getconnection es una conexi�n


abierta que se
puede utilizar para crear sentencias jdbc que pasen nuestras sentencias sql al
controlador de
la base de datos.

si uno de los drivers que hemos cargado reconoce la url suministada por el m�todo
drivermanager.getconnection,dicho driver establecer� una conexi�n con el
controlador de
base de datos especificado en la url del jdbc.

a menos que estemos escribiendo un driver, posiblemente nunca utilizaremos ning�n


m�todo del
interface driver, y el �nico m�todo de drivermanager que realmente necesitaremos
conocer para
establecer una conexi�n es el getconnection().

<font size="3">
<b><p>creaci�N y ejecuci�N de la sentencia:</p></b>
</font>
en jdbc existen dos formas principales de ejecutar y crear sentencias sql, la
primera es
usando un statement, y la segunda es creando un preparedstatement.

<font size="3">
<b><p>clase connection:</p></b>
</font>
representa la conexi�n con la base de datos. es el objeto que permite realizar las
consultas
sql y obtener los resultados de dichas consultas. es el objeto base para la
creaci�n de los
objetos de acceso a la base de datos.

<font size="3">
<b><p>m�todo createstatement():</p></b>
</font>
fue la primera manera de enviar sentencias sql usando java, este m�todo est� cada
vez m�s en
desuso, ya que no protege ante la inyecci�n de c�digo sql.

la forma de usarlo seria la siguiente:

<font color="red">
statement stmt = con.createstatement();
string condicion="nombre='"+nombredelaweb+"' and
pass='"+passdelaweb+"'";
//creamos la sentencia sql
string sqlselect =
"select * from tabla where "+condicion;
//ejecutamos la sentencia sql
stmt.executequery(sqlselect);
</font>
<b>nota: </b> observes que si passdelawebes = �' or '1'='1 � tendr�amos una un
fallo en la
seguridad de la aplicaci�n ya que tendr�a acceso sin saber la contrase�a.

<font size="3">
<b><p>clase statement:</p></b>
</font>
�sta clase utiliza diferentes m�todos los cuales permiten ejecutar diferentes
sentencias sql
simples, aquellas sentencias que no necesitan par�metros, utilizadas para las
consulta de base
de datos.

<font size="3">
<b><p>m�todo executequery();</p></b>
</font>
se utiliza para ejecutar consultas sql de tipo select devolviendo como resultado
un conjunto
de registros de un objeto de la clase resultset.

<u><b>ejemplo:</b></u>

<font color="red">
statement s = conn.createstatement ();
s.executequery ("select ced, nombre, edad from estudiante");
resultset rs = s.getresultset ();
</font>

<font size="3">
<u><b><p>clase preparedstatement();</p></b></u>
</font>
es otra forma de crear sentencias sql, esta forma evita la inyecci�n y si la
sentencia es m�s
larga se entiende mejor.

la forma de usarlo es la siguiente:

<font color="red">
//creamos la sentencia sql
string sqlselect = "select * from tabla where nombre=? and pass=?";
//ejecutamos la sentencia sql
preparedstatement ps = con.createpreparedstatement(sqlselect);
ps.setstring(1,nombredelaweb);
ps.setstring(2,passdelaweb);
ps.executequery();
</font>

<b>obtener los resultados:

c�Digo:</b>

<font color="red">
resultset rs = s.getresultset ();
</font>

como se muestra en �ste segmento de c�digo, cada vez que ejecutamos una sentencia
select
tanto el statement como el preparedstatement al hacer el executequery() nos
devuelve un
objeto de tipo resultset, este objeto como se puede adivinar por el nombre es un
set, por
lo tanto es iterable.

<font size="3">
<u><b><p>interfaz resultset</p></b></u>
</font>
la interfaz resultset proporciona acceso a una tabla de datos. un objeto resultset
normalmente
se genera ejecutando una sentencia.
un objeto resultset mantiene un cursor apuntando hacia su fila de datos actual.
inicialmente,
el cursor est� colocado delante de la primera fila. el m�todo next() mueve el
cursor a la fila
siguiente.
los m�todos getxxx recuperan valores de columna para la fila actual. puede
recuperar valores
utilizando el n�mero de �ndice de la columna o el nombre de la columna. en
general, la
utilizaci�n del �ndice de columnas es m�s eficaz. las columnas se numeran a partir
de uno.

a continuaci�n se muestra un programa que ase una conexi�n con una base de datos
junto con
su explicaci�n:
as� se conecta java al driver jdbc de mysql

<font color="red">
import java.sql.*;
</font>
1-la clase publica de conexi�n mysql
<font color="red">
public class conectamysql
{
</font>
2- main del programa
<font color="red">
public static void main (string[] args)
{
</font>
3- v�ase el paso 5
<font color="red">
connection conn = null;
</font>
4- una vez conectada al servidor mysql ya podemos darle el nombre del usuario y la
contrase�a
requerida por el programa eso se hace de la siguiente manera:
<font color="red">
try
{
string username = "root";
string password = "";
</font>
5- este es la forma que tiene java de abrir la base de datos donde

<font color="red">
string url = "jdbc:mysql://localhost/prueba";
</font>

jdbc: es el protocolo que estamos utilizando.

mysql: es el administrador mysql (a quien lo queremos conectar)

localhost: hace referencia que estamos conectado a una base de dato local pero
tambi�n podemos
conectarnos @156.35.94.6:1521 haciendo referencia al servidor y al
puesto que en
este caso es 1521.
prueba: esto ase referencia al nombre de la base de datos.

6- antes de que el administrador de controladores pueda activar un driver, �ste


tiene que estar
registrado. una posibilidad para registrarlo es cargando su clase con el m�todo
forname y esto
se puede hacer de la siguiente manera:
<font color="red">
class.forname ("com.mysql.jdbc.driver").newinstance ();
</font>
7- el administrador de controladores intentar� encontrar uno que use el protocolo
especificado
por el �url� de la base de datos, recorriendo todos los controladores registrados
en �l.
se debe lomar en cuenta que como ya esta declarado de tipo connection al principio
del programa
pero tambi�n se puede de la forma (connection conn = drivermanager.getconnection
(url,
username,password);) da igual.
<font color="red">
conn = drivermanager.getconnection (url, username, password);
system.out.println ("conexion database okkk!!!");
</font>
8- en el caso que se haya hecho una conexi�n exitosa a la base de datos el
programa ya esta listo
para el uso de las tablas de la base de datos.
<font color="red">
try
{
//uso de la tabla estudiante
</font>
9-en este paso crea el objeto statements que en este caso va a ser la �s� lo
necesitamos para
manipular los datos de la base de datos.
<font color="red">
statement s = conn.createstatement ();
</font>
10-una vez creado el objeto de la base de datos se procede a especificar la
sentencia sql que
deseamos ejecutar, o los datos que queremos de la base de datos. tambi�n se debe
tomar en
cuenta que el m�todo executequery es para lanzar instrucciones select del lenguaje
sql.
<font color="red">
s.executequery ("select ced, nombre, edad from
estudiante");
</font>
11- cuando se ejecuta una consulta sql, lo importante es el resultado. el objeto
executequery
que usamos anteriormente devuelve un objeto de tipo resultset que se puede emplear
para procesar
las filas del resultado.
<font color="red">
resultset rs = s.getresultset ();
</font>
12- para analizar el conjunto de resultados es necesario un ciclo while que y que
se inicialice
un contador para saber la cantidad de elementos extra�do de la base de datos.
<font color="red">
int count = 0;
system.out.println ("datos de los estudiantes \n");
while (rs.next ())
{
</font>
13-en cada ciclo edadval, nombreval, cedval toma un nuevo valor, esto se hara
mientras se hayan
le�dos todos los elementos de la base de datos.
esta lectura lo hara por campo, por ejemplo en la primera buela del ciclo las
variables tomaran
los siguientes valores:
<b>prueba</b>

<table border="1" bordercolor="black" align="center" width="50%">


<tr align="center" bgcolor="bluerai">
<td>edad</td>
<td>nombre</td>
<td>ced</td>
</tr>
<tr align="center">
<td>20</td>
<td>jes�s lee</td>
<td>9-722-1388</td>
</tr>
<tr align="center">
<td>30</td>
<td>eric leandro</td>
<td>9-723-2416</td>
</tr>
<tr align="center">
<td>34</td>
<td>diaz gabriel</td>
<td>4-5-4554</td>
</tr>
</table>
<b>
int edadval = 20
string nombreval = �jesus lee�
string cedval = 9-722-1388
</b>
en ente programa esto se seguira haciendo mientras halla next o sea siguiente.
<font color="red">
int edadval = rs.getint ("edad");
string nombreval = rs.getstring ("nombre");
string cedval = rs.getstring ("ced");
</font>
14- es necesario y recomendable imprimir los datos para observar si los datos son
los correctos
y no hay problema en la lectura.
<font color="red">
system.out.println ("\n nombre = " + nombreval
+ "\n cedula = " + cedval
+ "\n edad = " + edadval );
++count;
}
</font>
15-una ves que el resultado haya sido procesado se debe cerrar el statement y eso
es lo que es
necesario en este programa se hace de la siguiente manera:
<font color="red">
rs.close ();
s.close ();
</font>
16- si el usuario desea puede saber las cantidades de registros procesados, esto
se hace
imprimiendo
el contador.
<font color="red">
system.out.println ("\n registros recuperados...."+ count);
}
</font>
17- puede darse el caso de que de por algunas razones no podamos tener acceso a la
tabla,
entonces es necesario en match para que ejecute los mensaje de errores si no se
puede
acceder a la base de datos de manera exitosa.
<font color="red">
catch (exception e)
{
system.err.println ("problemas con acceso a la tabla");
}
}
</font>
18- si ocurre algun problema al tratar de conectar con mysql el catch es
nesesario para
que de aviso del problema al usuario.
<font color="red">
catch (exception e)
{
system.err.println ("no puede conectarse al servidor mysql");
}
/****************************************************************/
finally
{
</font>
19- el paso siguiente cierra el statement un caso de que este abierto o conectado
o como
dice la expresi�n siguiente mientras sea diferente a null.
<font color="red">
if (conn != null)
{
try
{
conn.close ();
system.out.println ("\n !!!!!cerrada la coneccion a mysql");
}
catch (exception e) { /* sin mensajes de error */ }
}
}
}
}.
</font>

<table border=0 width=100% align=center>


<tr>
<td><b>autores:</b>
<br>
eric gonz�lez<br>
jes�s Lee<br>
gabriel diaz</td>
<td valign=top align=right><b>fecha de creaci�n:</b>
<br>17-11-2006</td>
</tr>

</body>

</html>

Vous aimerez peut-être aussi