Acceso a BDs en Java: JDBC Introducción

Anuncio
Acceso a BDs en Java: JDBC
Bases de Datos II
1
Introducción
• Para hacer una aplicación de BDs en Java se
necesita disponer del driver adecuado para
el SGBD.
• En nuestro caso necesitamos el de mysql.
http://dev.mysql.com/downloads/connector/j/3.0.html
• Ahí se obtiene el archivo:
mysql-connector-java-3.0.14-production.jar
2
1
Introducción
• Este fichero debe estar en un sitio visible para
Java tanto al compilar la aplicación como al
ejecutarla.
javac –classpath mysql-connecor-java-3.0.12-production.jar;. Aplicación.java
java –classpath mysql-connecor-java-3.0.12-production.jar;. Aplicación
• Al inicio de nuestra aplicación debe aparecer (al
menos) la siguiente biblioteca de clases:
import java.sql.*;
3
Introducción
• Lo primero que hemos de hacer es ver cual es la
clase que implementa al controlador JDBC:
com.mysql.jdbc.Driver
• Y debe ser registrado para poder ser utilizado en la
aplicación (en el código de la propia aplicación)
Class.forName(“com.mysql.jdbc.Driver”);
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
4
2
Introducción
• Después se debe construir una URL a la base de
datos para JDBC.
• Por ejemplo, para mysql sería de la siguiente
forma:
jdbc.mysql://[host][:port]/[database][?propName1][=propValue1][&propName2]=[propValue2]...
jdbc.mysql://localhost:3306/Libros?user=usuario&password=clave
jdbc:mysql://misiapepa.uv.es:3306/estancias
5
Crear conexión
• Una vez que se ha registrado la clase del
controlador se crea una conexión (con el siguiente
método estático de la clase DriverManager):
public static Connection getConnection(String url) throws SQLException
string url = “jdbc:mysql://localhost:3306/estancias?user=usu1&password=clave”;
Connection con = DriverManager.getConnection(url);
6
3
Ejecución de sentencias
• Se necesita crear un objeto de la clase Statement a
partir del objeto de tipo Connection.
Statement sentencia = con.createStatement();
• Una vez creada la sentencia se pueden ejecutar
consultas:
ResultSet executeQuery(String SQL);
int executeUpdate(String SQL);
boolean execute(String SQL); //Cuando no se sabe de antemano el tipo
//Ejemplo:
ResultSet res = sentencia.executeQuery("SELECT ciudad from casas");
7
Ejecución de sentencias
• El último de estos métodos devuelve true si la
senctencia contenía un SELECT. En ese caso se
pueden obtener los resultados llamando al método
getResultSet() que devuelve un objeto del tipo
ResulSet.
//Ejemplo:
tiposentencia = sentencia.execute(sentenciaSQL);
if (tiposentencia){
ResultSet res = sentencia.getResulSet();
}
8
4
Ejecución de sentencias II
• También se puede ejecutar sentencias utilizando la
clase PreparedStatement: se utiliza en las que se
va a ejecutar varias veces la misma consulta.
String Consulta =“INSERT INTO tabla(usuario,email,fecha) values (?,?,?)”;
PreparedStatement psentencia = con.prepareStatement(consulta);
• Después se rellenan los los valores que se desee:
psentencia.setString(1,user); //Supongo variable user contiene el valor correcto
psentencia.setNull(2,email);
psetencia.setDate(3,fecha);
//Y se ejecuta
psentencia.executeUpdate();
9
Obtención de resultados
• La clase ResultSet dispone de métodos para
moverse en filas y de métodos para seleccionar
una determinada columna:
void beforeFirst()
void first();
void afterLast();
void last();
boolean next();
boolean previous();
float getFloat(int numeroColumna);
float getFloat(String NombreColumna);
int getInt(int numeroColumna);
int getInt(String NombreColumna);
java.sql.Date getDate(string NOmbreColumna);
int getColumnCount() //Devuelve número de columnas
String getColumnName(int column) //Obtiene el nombre de la columna
String getColumnTypeName(int column);
10
5
Obtención de resultados
• El resultSet proporciona también una forma de
detectar si el valor de una columna es NULL:
boolean wasNull() //devuelve true si la última columna leida era NULL
11
import java.sql.* ;
import java.math.*;
class EjemploJDBCmysql{
public static void main (String args [])
{
try
{
DriverManager.registerDriver(new
com.mysql.jdbc.Driver()); //Registro el driver
//Obtengo una conexión
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3
306/estancias");
12
6
Statement sentencia = con.createStatement();
ResultSet res = sentencia.executeQuery("SELECT
IdCasa,ciudad, DispDesde,DispHasta from casas");
while (res.next())
{
String s = res.getString("ciudad");
int id = res.getInt("IdCasa");
java.sql.Date fecha1 = res.getDate("DispDesde");
System.out.println(id + " " + s + " " + fecha1);
}
sentencia.close();
con.close();
}
catch( SQLException ex)
{
System.out.println("SQLException:" + ex.getMessage());
System.out.println("SQLEState:" + ex.getSQLState());
System.out.println("Vendor Error:" + ex.getErrorCode());
}
}
}
13
import java.sql.*;
public class prujdbc
{
public prujdbc()
{
}
public static void main(String args[])
{
try
{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
System.out.println("Conectando...");
Connection con;
con = DriverManager.getConnection("jdbc:oracle:oci8:@",“bdii01",“bdii01");
System.out.println("CONECTADO.");
String query = "SELECT nombre,estilo FROM autores";
Statement stmt;
stmt = con.createStatement();
14
7
ResultSet result = stmt.executeQuery(query);
while ( result.next() )
{
String name = result.getString(1) + " " + result.getString(2);
System.out.println(name);
}
result.close();
stmt.close();
String inser = "INSERT INTO autores
(id,nombre,estilo,fechanacimiento) values
(100,'desconocido','???','2002-01-01')";
stmt = con.createStatement();
stmt.execute(inser);
stmt.close();
con.close();
}
catch (SQLException ex)
{
System.err.print("SQLException: ");
System.err.println(ex.getMessage());
}
}
}
15
8
Descargar