Vous êtes sur la page 1sur 7

0

Ms Siguienteblog

Crearunblog Acceder

ProgramacinJava
Buscar

TutorialJava.AprendeaprogramarconJavadesdecero.

ltimaentrada

Teora

Ejercicios

EjerciciosPOO

C++
Adsby Google

JavaJDBCparaaccederaunabasededatosMySQL.Ejemplos

BaseDeDatos
Datos
MySQLServer
COMPRTELO

JDBC

JDBC (Java DataBase Connectivity) es la API que permite la conexin de un programa Java y una base de
datosrelacional.
Seencuentradentrodelpaquetejava.sql.
Incluye clases e interfaces que permiten el acceso a la bases de datos para ejecutar consultas,
actualizaciones,ejecutarprocedimientos,etc.
AlgunasdelasclaseseinterfacesdeJDBCson:
Clase/Interface

Funcin

ClaseDriverManager

Establecelaconexinconlabasededatos

InterfaceConnection

RepresentaunaconexinconlaBD

InterfaceStatement

EjecucindeconsultasSQL

InterfacePreparedStatement

Ejecucin de consultas preparadas y procedimientos


almacenados

InterfaceResultSet

ManipulacinderegistrosenconsultasdetipoSelect

InterfaceResultSetMetadata

Proporciona informacin sobre la estructura de los


datos.

El objetivo de las interfaces de JDBC es definir como trabajar con la base de datos: como establecer la
conexin,comoejecutarunaconsulta,etc.
Parapoderejecutarnuestroprogramanecesitamoslasclasesqueimplementenestasinterfaces.
DriverJDBC
LlamamosDRIVERalconjuntodeclasesqueimplementanlasinterfacesJDBC
EldriverproporcionalacomunicacinentrelaaplicacinJavaylabasededatos

Tweet

ENTRADASPOPULARES

Java Scanner para lectura de


datos
La clase Scanner est
disponibleapartirdeJava5y
facilita la lectura de datos en
los programas Java. Primero
veremosvariosejemplos...
Java ArrayList.
Estructura
dinmica
de
datos
DECLARACINY
CREACIN DE
UN ARRAYLIST De forma
general un ArrayList en Java
secreadelasiguienteforma:
ArrayList nombreArray =
new...
Ejemplos de Expresiones
RegularesenJava
Una expresin regular define
un patrn de bsqueda para
cadenas de caracteres. La
podemos
utilizar
para
comprobar si una cadena
contiene...
MatricesenJava
Un array en
Java
puede
tener ms de
una dimensin.
El caso ms
general son los arrays
bidimensionales
tambin
llamadosmatricesotablas....
Java
Ejercicios
Bsicos
Resueltos2
Java
Ejercicios
Bsicos
estructurasecuencialRelacin
N 2: Ejercicios 4, 5, 6 y 7
Ejercicio 4: Programa que lea
unacantidaddegradosc...

Cadatipodebasesdedatos(Oracle,MySQL,PostGreSQL,etc)tienensupropiodriver.
Los drivers los proporcionan los fabricantes de las bases de datos. Normalmente se descarga desde la
pginawebdelfabricante.
Porlotanto,elprimerpasoparatrabajarconbasesdedatosdesdeJavaesconseguireldriveradecuado.
EnnuestrocasoutilizaremosMySQLcuyodrivervamosadescargardesde:
http://dev.mysql.com/downloads/connector/j/
Una vez descargado lo descomprimimos y el .jar que contiene lo debemos aadir como librera de
clasesanuestroproyecto.
ACCESOABASESDEDATOSCONJDBC

Una vez incorporado el driver como librera de la aplicacin, se deben seguir los siguientes pasos para
accederaunabasededatos:

Mayordetresnumeros
Calcular el mayor de tres
nmeros enteros en Java. El
programa lee por teclado tres
nmeros enteros y calcula y
muestraelmayordelos...
MtodosenJava
Un mtodo en Java es un
conjunto de instrucciones
definidasdentrodeunaclase,
querealizanunadeterminada
tareayalasquepodemos...
Javaprintfparadarformatoa
losdatosdesalida
Vamos a ver como utilizar
printf para dar formato a los
datos que se imprimen por

1. Importar los paquetes: Normalmente es suficiente


conlasentenciaimportjava.sql.*
2. Cargar el driver: El driver se debe cargar para
poder utilizarlo. Esto lo realiza el mtodo esttico
forName()delaclaseClass.
Class.forName(Stringdriver)
DriverJDBCparaMySQL:
Class.forName("com.mysql.jdbc.Driver")

pantalla
en
Java.
Este
problemasenos
plantea
por
ejempl...

DataCenter
Solutions
FindDataCenterSolutions
forYourOrganizationfrom
ITExpertsatCDW

LanzaunaexcepcinClassNotFoundException
3.Crearlaconexin:Estolorealizaelmtodoesttico
getConnection()delaclaseDriveManager.
DriverManager.getConnection(Stringurl)
url es un String que nos permite localizar la base de
datos.

Generacin
de
nmeros
aleatoriosenJava
Podemos generar nmeros
aleatorios en Java de dos
formasdistintas:1.Utilizando
elmtodoestticorandomde
laclaseMath:Math.ran...
Como obtener la fecha actual
delsistemaenJava
Paraobtenerlafechaactualy
en general para trabajar con
fechas en Java tenemos
varias posibilidades. En este
postvamosaexplicarcomo...

Normalmentesecomponedetrescampos:
jdbc:tipoBD:datos_de_conexion
ParaMySQL,elformatoes:

ProgramacinJava

"jdbc:mysql://ordenador_donde_est_la_base_de_datos/base_de_datos".
Deberemos indicar el nombre o IP del ordenador en el que se encuentra el servidor de base de datos y a
continuacinelnombredelabasededatos.
UnasobrecargadelmtodogetConnectionacepta,ademsdelaurl,elusuarioycontraseadelabasede
datos.
EstemtododevuelveunobjetoqueimplementalainterfazConnection.
Por ejemplo, si tenemos corriendo en nuestro ordenador el servidor de bases de datos, y nos queremos
conectaraunabasededatosllamadapruebaquetieneunusuariorootycontrasea1dawescribiremos:
Connectionconexion=
DriverManager.getConnection("jdbc:mysql://localhost/prueba","root","1daw")

TRANSLATE

Seleccionaridioma

SEGUIDORES

Participarenestesitio
GoogleFriendConnect

Miembros(77) Ms

4. Ejecutar una consulta: Las consultas se manejan mediante un objeto que implementa la interface
Statement.
Antesdepoderejecutarunaconsultadebemoscrearelobjeto.
ElobjetosecreautilizandoelmtodocreateStatement()deConnection.
Statements=conexion.createStatement()
UnavezcreadopodemosutilizaralgunosdelosmtodosdeStatementparaenviarlaconsultaalaBD.

Yaeresmiembro?Iniciarsesin

Algunosdeestosmtodosson:
booleanexecute(StringsentenciaSQL)

Siesunaconsultadeaccin(Insert,
Delete, Update) devuelve false
indicando que no se generan
resultados. Si es una consulta de
seleccin(Select)devuelvetrue.

intexecuteUpdate(StringsentenciaSQL)

Enva una consulta de accin.


Devuelve el nmero de registros
afectadospordichaaccin.

ResultSetexecuteQuery(StringsentenciaSQL)

Enva una consulta de seleccin.


DevuelveunobjetoResultSetconlos
datosobtenidosdelaconsulta.

Por ejemplo, si en la base de datos tenemos una tabla llamada persona, una consulta de todos los
registrosdelatablasera:
ResultSetrs=s.executeQuery("select*frompersona")
5. Manipular el resultado de la consulta: El objeto de tipo ResultSet devuelto por la consulta de
seleccin dispone de un cursor para desplazarse por los registros y de mtodos para acceder al valor de
cadacampo.
DesplazarseporlosregistrosdeunResultSet
Unavezobtenido,sucursorsesitajustoantesdelprimerregistroobtenido.
Por defecto, un ResultSet es un objeto deslo avance y solo lectura. El recorrido se har siempre
desde el principio hacia delante y los campos no podrn ser modificados. Se pueden crear tambin
ResultSetsdesplazablesdelectura/escritura.
El mtodo next() permite desplazarnos por los registros. Una llamada a este mtodo desplaza el cursor al
siguienteregistro.Devuelvefalsesisehallegadoalfinalytrueencasocontrario.
while(rs.next()){
.....
}
Accederaloscamposdelresultadodeunaconsulta

LENGUAJEC++

ProgramacionC++
Estructuras de Control en
C++

Loscamposdelregistroapuntadoporelcursorsepuedenaccedermediantedosgruposdemtodos.xxxes
cualquiertipodedatobsicoJavamsString,DateyObject.Sedeberutilizarelmtodoadecuadoaltipo
dedatoquecontieneelcampo.SinoconocemoseltipodedatopodemosutilizargetObject().
xxxgetXxx(intposicin)

Obtiene el valor del campo que ocupa la


posicin indicada. La primera posicin es la
1.

xxxgetXxx(StringnombreCampo)

Obtieneel valor del campo que coincide con


elnombreindicado.

Por ejemplo, si la
tablapersonacontiene3camposenesteorden:iddetipoint,nombredetipoStringyfechadetipoDate:
while(rs.next()){
System.out.println(rs.getInt("Id")+""+rs.getString(2)+""+rs.getDate(3))
}
Adems de estos mtodos, la interfaz ResultSet proporciona una gran cantidad de mtodos para acceder y
manejarlosresultadosdelaconsultaentreellos:
booleanisFirst()quedevuelvetruesielcursorapuntaalprimerregistro.
booleanisLast()quedevuelvetruesielcursorapuntaalltimo.
intgetRow()quedevuelvelaposicindelregistroactual,siendo1laposicindelprimerregistro,etc.
http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html
6. Desconexin de la base de datos: Permite liberar recursos de memoria y CPU. El cierre de una
conexinserealizamedianteelmtodoclose()delainterfazConnection.
conexion.close()
La interfaz Statement tambin dispone de un mtodo close() para liberar los recursos utilizados por el
objeto.Estodebehacerseantesdecerrarlaconexin.
CuandosecierraunaconexintodoslosobjetosStatementsecierranautomticamente.
La mayora de mtodos usados el la API JDBC lanzan una excepcin de tipo SQLException que se debe
capturar.
EjemplosdeaccesoabasesdedatosMySQLconJavayJDBC

Para realizar los siguientes ejemplos de acceso a una


basededatossupondremoslosiguiente:
El servidor de base de datos debe estar arrancado y
suponemosqueutilizaelpuertopordefecto(3306)
La base de datos que vamos a utilizar se llama prueba
conunusuariorootycontrasea1daw.
La base de datos tiene una tabla persona con tres
campos:
id:smallintauto_incrementprimarykey
nombre:varchar(60)
nacimiento:date
Ejemplo 1: Conexin a una base de datos MySQL y
consultadeunatabla.
importjava.sql.*
publicclassEjemploAccesoBD1{
publicstaticvoidmain(String[]args){
Connectionconexion=null
try{
//Cargareldriver
Class.forName("com.mysql.jdbc.Driver")
//Seobtieneunaconexinconlabasededatos.
//Enestecasonosconectamosalabasededatosprueba
//conelusuariorootycontrasea1daw
conexion=DriverManager.getConnection("jdbc:mysql://localhost/prueba","root","1daw")
//SecreaunStatement,pararealizarlaconsulta
Statements=conexion.createStatement()
//Serealizalaconsulta.LosresultadosseguardanenelResultSetrs
ResultSetrs=s.executeQuery("select*frompersona")
//SerecorreelResultSet,mostrandoporpantallalosresultados.
while(rs.next()){
System.out.println(rs.getInt("Id")+""+rs.getString(2)+""+rs.getDate(3))
}
}catch(SQLExceptione){
System.out.println(e.getMessage())
}catch(ClassNotFoundExceptione){
System.out.println(e.getMessage())
}finally{//Secierralaconexinconlabasededatos.
try{
if(conexion!=null){

conexion.close()
}
}catch(SQLExceptionex){
System.out.println(ex.getMessage())
}
}
}
}
Ejemplo2:Crearunatablaeinsertardatos.
Crearemoslatablacontactosdentrodelabasededatosprueba.
importjava.sql.*
publicclassEjemploAccesoBD2{
publicstaticvoidmain(String[]args){
Connectionconexion=null
try{
//Cargareldriver
Class.forName("com.mysql.jdbc.Driver")
//Seobtieneunaconexinconlabasededatos.
conexion=DriverManager.getConnection("jdbc:mysql://localhost/prueba","root","1daw")
//SecreaunStatement,pararealizarelquery
Statements=conexion.createStatement()
//secreaunatablanueva
s.executeUpdate("CREATETABLEcontacto(idINTAUTO_INCREMENT,
PRIMARYKEY(id),nombreVARCHAR(20),
apellidosVARCHAR(20),telefonoVARCHAR(20))")
//Losdatosquevamosainsertarlostenemosen3arrays
Stringnombres[]={"Juan","Pedro","Antonio"}
Stringapellidos[]={"Gomez","Lopez","Alvarez"}
Stringtelefonos[]={"987452154","989654125","985321478"}
//seinsertandatosenlatabla
for(inti=0i<nombres.lengthi++){
s.executeUpdate("INSERTINTOcontacto(nombre,apellidos,telefono)
VALUES('"+nombres[i]+"','"+apellidos[i]+"','"+telefonos[i]+"')")
}
//Serealizaunaconsultasobrelatablacontacto.
ResultSetrs=s.executeQuery("select*fromcontacto")
//SerecorreelResultSet,mostrandoporpantallalosresultados.
while(rs.next()){
System.out.println(rs.getInt(1)+""+rs.getString(2)+""+
rs.getString(3)+""+rs.getString(4))
}
}catch(SQLExceptione){
System.out.println(e.getMessage())
}catch(ClassNotFoundExceptione){
System.out.println(e.getMessage())
}finally{//Secierralaconexinconlabasededatos.
try{
if(conexion!=null){
conexion.close()
}
}catch(SQLExceptionex){
System.out.println(ex.getMessage())
}
}
}
}
Enlainstruccin:
s.executeUpdate("INSERTINTOcontacto(nombre,apellidos,telefono)
VALUES('"+nombres[i]+"','"+apellidos[i]+"','"+telefonos[i]+"')")
Las variables de tipo String que corresponden a los datos de tipo VARCHAR de la tabla deben ir
entrecomillassimples.
Silainstruccinsehicieracondatosfijossera:
INSERTINTOcontacto(nombre,apellidos,telefono)VALUES('Juan','Gomez','987452154')
Lascomillasnoseescribenparadatosnumricos.
Ejemplo3:ModificareltelfonodelprimercontactodelatablapersonaconnombreJuan.
importjava.sql.*
publicclassEjemploAccesoBD3{

publicstaticvoidmain(String[]args){
Connectionconexion=null
intid
try{
//Cargareldriver
Class.forName("com.mysql.jdbc.Driver")
//Seobtieneunaconexinconlabasededatos.
conexion=DriverManager.getConnection("jdbc:mysql://localhost/prueba","root","1daw")
//SecreaunStatement,pararealizarelquery
Statements=conexion.createStatement()

//Serealizalaconsulta
//QueremosobtenereliddelprimercontactoconnombreJuan
ResultSetrs=s.executeQuery("SELECTidFROMcontactoWHEREnombre='Juan'")

if(rs.next()){//Sirs.next()devuelvetruesignificaquealmenoshayunregistro
id=rs.getInt("id")//seobtienensuid
//seactualizaelregistro
s.executeUpdate("UPDATEcontactoSETtelefono='987654321'WHEREid="+id)
}
}catch(SQLExceptione){
System.out.println(e.getMessage())
}catch(ClassNotFoundExceptione){
System.out.println(e.getMessage())
}finally{//Secierralaconexinconlabasededatos.
try{
if(conexion!=null){
conexion.close()
}
}catch(SQLExceptionex){
System.out.println(ex.getMessage())
}
}
}
}
ResultSetdesplazablesymodificables

Se pueden crear ResultSet con ms prestaciones que las que tienen los que hemos creado hasta ahora.
Recuerdaqueloscreadospordefectosolosepuedenrecorrerdesdeelprincipiohastaelfinalynopermiten
modificarlosdatos.
ParaellotenemosquemodificarlaformadecrearelStatement.
EnlugardecrearunStatementas:Statements=conexion.createStatement()
UtilizaremosestaversindelmtodocreateStatement():
StatementcreateStatement(inttipoResultSet,intconcurrenciaResultSet)
tipoResulSetpuedeserunodeestosvalores:
ResultSet.TYPE_FORWARD_ONLY

ResultSetdesoloavance.Eselvalorpordefecto

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet desplazable en ambas direcciones. No


refleja los cambios en los datos que se puedan
producirenlabasededatos.

ResultSet.TYPE_SCROLL_SENSITIVE

ResultSetdesplazableenambasdirecciones.Refleja
loscambiosenlosdatosquesepuedanproduciren
labasededatos.

concurrenciaResultSetpuedeserunodeestosvalores:
ResultSet.CONCUR_READ_ONLY

Camposdesololectura.Eselvalorpordefecto

ResultSet.CONCUR_UPDATABLE

Camposmodificables.

AdemsdelosmtodosutilizadosporlosResultSetpordefecto,algunosdelosmtodosquesepuedenusar
sonlossiguientes:
Mtodo

Descripcim

booleanfirst()

Desplazaelcursoral primer registro. Devuelve true si estamos


anteunafilavlidayfalseencasocontrario.

voidbeforeFirst()

Desplaza el cursor a la posicin situada antes del primer


registro.

booleanlast()

Desplaza el cursor al ltimo registro. Devuelve true si estamos


anteunafilavlidayfalseencasocontrario.

voidafterLast()

Desplaza el cursor a la posicin situada despus del ltimo

registro.
booleanabsolute(intpos)

Desplazaelcursoralaposicinindicadaporpos.Devuelvetrue
siestamosanteunafilavlidayfalseencasocontrario.

Para modificar un campo del ResultSet, utilizamos mtodos updateXxx donde Xxx es el tipo de dato del
campoquevamosaactualizar.
Porejemplo:modificamoselcampo2(detipoString)delregistro2delatablapersona.
rs.absolute(2)//nossituamosenelregistroamodificar
rs.updateString(2,"AnaLozano")//Modificamoselcampo2.Nuevovalor:"AnaLozano"
rs.updateRow()//seactualizaelregistro.
http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html
EjemplodeResultSetdesplazableymodificable
En este ejemplo se crea un ResultSet que se va recorrer de forma inversa, desde el final al principio.
Ademssevaautilizarparamodificarunregistrodelatablapersona.
importjava.sql.*
publicclassEjemploAccesoBD6{
publicstaticvoidmain(String[]args){
Connectionconexion=null
try{
Class.forName("com.mysql.jdbc.Driver")
conexion=
DriverManager.getConnection("jdbc:mysql://localhost/prueba","root","1daw")

//IndicamosqueelResultSetserdesplazableymodificable
Statements=conexion.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE )
ResultSetrs=s.executeQuery("select*frompersona")

//RecorrerelResultSetdesdeelfinalhastaelprincipio
rs.afterLast()
while(rs.previous()){
System.out.println(rs.getInt(1)+""+rs.getString(2)+""+rs.getDate(3))
}

//modificarelcamponombre(2)delregistro2delResultSet
//elcambiotambinseproduceenlabasededatos
rs.absolute(2)
rs.updateString(2,"AnaLozano")
rs.updateRow()
//RecorrerelResultSetparacomprobarlamodificacin.
//PararecorrerelResultSetdesdeelprincipiohastaelfinalnosdebemossituar
//denuevoalprincipio
rs.beforeFirst()
while(rs.next()){
System.out.println(rs.getInt(1)+""+rs.getString(2)+""+rs.getDate(3))
}
}catch(SQLExceptione){
System.out.println(e.getMessage())
}catch(ClassNotFoundExceptione){
System.out.println(e.getMessage())
}finally{
try{
if(conexion!=null){
conexion.close()
}
}catch(SQLExceptionex){
System.out.println(ex.getMessage())
}
}
}
}
ParainsertarfilaselResultSettieneelmtodomoveToInsertRow()quenosllevaaunafilavacaparaque
llenemos sus campos mediante mtodos updateXxx y finalmente la insertemos en la tabla mediante el
mtodoinsertRow().
ElesquemabsicoparainsertarunafilautilizandoResultSet:
rs.moveToInsertRow()//posicionarseenlafilavaca
rs.updateXxx(campo,valor)//hacerlosupdatesdeloscampos
rs.updateXxx(campo,valor)
..
rs.insertRow()
//finalmenteinsertarlanuevafilaenlatabla.

Recomendar esto en Google

5comentarios:
Annimo 7defebrerode2014,5:16
muybuenaportemuchisisismasgracias:)
Responder

Annimo 30deabrilde2014,18:22
Excelenteinformacion,muyclarayentendible.
Gracias
Responder

Annimo 31deagostode2014,2:33
Excelenteaporte,milgracias.
Responder

RunIT 23deseptiembrede2014,22:59
Lesrecomiendoliberarlosrecursosutilizadosporjdbc,paraesopuedenveresteartculo:
http://www.runit.com.ar/blog/view/133497/liberarocerrarlosrecursosutilizadosporjdbcparanocolapsarel
motordebasededatos
Esperoquelesseatil
Saludos!
Responder

Annimo 11deseptiembrede2015,19:55
Excelentearticulo,mesirviodemucho,muchisimasgracias
Responder

Introducetucomentario...

Comentarcomo:

JaenPierreQuispeNapuche(Google)
Salir

Publicar

Vistaprevia

Entradamsreciente

Avisarme

Pginaprincipal

Entradaantigua

Suscribirsea:Enviarcomentarios(Atom)

LICENCIA

ProgramacinJavabyEnriqueGarcaHernndez
EstaobraestbajounalicenciaCreativeCommonsReconocimientoNoComercialCompartirIgual3.0EspaaLicense.
Parareconocerlaautoradebesponerelenlacehttp://puntocomnoesunlenguaje.blogspot.com.es

ConlatecnologadeBlogger.

Vous aimerez peut-être aussi