guia7 java

12

Click here to load reader

Upload: odelys2003

Post on 23-Jun-2015

2.019 views

Category:

Education


4 download

DESCRIPTION

GUIA 7Conexión a Base de Datos con NetBeans IDE 6.1

TRANSCRIPT

Page 1: Guia7 java

GUÍA 6 pág. 1

GUIA 7

Conexión a Base de Datos con NetBeans IDE 6.1

Facultad: Ingeniería Escuela: Computación Asignatura: Java.

Page 2: Guia7 java

GUÍA 6 pág. 2

I. OBJETIVOS.

� El estudiante podrá Conectarse a los Gestores de Base de Datos (MySQL o

SQLServer 2005).

� El estudiante podrá hacer capaz de hacer conexiones directamente desde un

formulario utilizando NetBeans IDE 6.1 con SQLServer 2005.

II. INTRODUCCIÓN.

Conexión a la base de datos. Para conectarse a la base de datos, para lo cual básicamente hay que realizar dos pasos.

1. Registrar (Cargar en Memoria) el controlador. Esto se puede hacer de dos formas:

� De forma dinámica, por medio del método Class.forName(String de driver). Esta es la forma más usual y la que usaremos en la mayor parte de los ejemplos. Ejemplos de carga dinámica: * En MySQL local: Class.forName("com.mysql.jdbc.Driver"); * En Oracle: Class.forName("oracle.jdbc.Driver.OracleDriver");

� De manera estática, usando System.setProperties("jdbc.drivers", String de driver).

2. Establecer la conexión por medio del método DriverManager

Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/ java?user=root&password=admin");

DriverManager tiene muchos métodos getConnection() con parámetros variados. Todos son variantes de lo mismo y la información que suministramos es la misma. Aquí hemos utilizado uno con tres parámetros String.

NOTA: Si todo va bien, tendremos nuestra conexión a la base de datos. Si va mal, saltará una excepción. Por eso es importante (y obligatorio para que compile) meter todo esto en un try-catch.

Page 3: Guia7 java

GUÍA 6 pág. 3

Para enviar comandos SQL a la base de datos, se usa la clase Statement de java. Esta clase se obtiene a partir de la conexión, de esta forma:

Statement instruccion = conexion.createStatement();

Por supuesto, dentro de un try-catch. Statement tiene muchos métodos, pero hay dos interesantes: executeUpdate() y executeQuery(). El primero se usa para sentencias SQL que implica modificaciones en la base de datos (INSERT, UPDATE, DELETE, etc). El segundo sólo para consultas (SELECT y similares).

Consultar datos de la base de datos Vamos a hacer ahora una consulta de los datos que acabamos de insertar en la base de datos. Las consultas se hacen con executeQuery() y nos devolverán un ResultSet. El ResultSet de alguna forma representa una conexión hacia los datos. En el ResultSet NO están todavía los datos. Según se los vayamos pidiendo, los irá trayendo de base de datos. Esto quiere decir que si una consulta devuelve muchos resultados, no se nos va a llenar la memoria por el hecho de hacer la consulta. Para traer el primer resultado, debemos llamar el método next() del ResulSet. Para el siguiente otro next() y así sucesivamente hasta que next() devuelva false, indicando que ya no quedaban datos. El código puede ser así

ResultSet tabla = instruccion.executeQuery("select Cod_materia, Nombre_materia, Descripcion from materia");

System.out.println("Cod_materia\tNombre_materia\tDescripcion"); while(tabla.next()) System.out.println(tabla.getInt(1)+"\t"+tabla.getString(2)+"\t"+ tabla.getString(3));

Hemos hecho un SELECT para obtener los datos. Luego un bucle while(table.next()), es decir, mientras next() vaya trayendo los resultados. Después de next(), el resultado está disponible en el ResulSet. La forma de recoger los campos es pedirlos con algún método get(). Si sabemos de qué tipo es el dato, podemos pedirlo con getInt(), getString(), etc. Si no lo sabemos o nos da igual (como en este caso), bastará con un getObject(), capaz de traer cualquier tipo de dato. En estos métodos get() podemos pasar como parámetro un entero, empezando en 1, que es el número del campo en el SELECT. Es decir, si hacemos SELECT campo1, campo2, campo3 ..., si pedimos getObject(1) obtenemos el valor de campo1, para getObject(2) el de campo2, etc.

Page 4: Guia7 java

GUÍA 6 pág. 4

Cerramos conexiones Los Connection, Statement y ResultSet con conexiones abiertas con base de datos. Debemos cerrarlas. ResultSet se cierra solo cuando hacemos otra llamada execute() al Statement del que obtuvimos este ResultSet o bien cuando el recolector de basura "recolecta" al ResultSet. No nos preocupa en principio que se quede abierto, porque se acabará cerrando solo. Eso sí, no podemos hacer nada con el Statement hasta que hayamos terminado con el ResultSet o se nos cerrará. Si necesitamos realizar otra cosa con base de datos, debemos crear otro Statement distinto. Cuando terminemos con el Statement, lo cerramos con st.close(). Cuando terminemos con la Connection, la cerramos con conexion.close().

Tratamiento de Excepciones (try-catch) En Java, como en cualquier otro lenguaje de programación, pueden existir situaciones en la que el programa falle. Java llama a estos errores excepciones. Para tratar excepciones deberemos usar la instrucción try (que significa intentar en español). 1. try 2. { 3. //declaración que causa la excepción 4. } Entre las llaves de try escribiremos el código que hará funcional nuestro programa. Para capturar la excepción que puede generar este código necesitaremos otra instrucción llamada catch (capturar).

1. catch(NombredeExcepcion obj) 2. {

3. //código para tratar el error 4. }

Page 5: Guia7 java

GUÍA 6 pág. 5

PROCEDIMIENTO.

OJO: Los ejemplos 1 y 2, la salida de dichas Conexión y Consultas las podrá visualizar en el Output.

Ejemplo No 1. Con MYSQL

Nombre de la Clase Programa.java

import java.sql.*;

public class Programa {

public static void main(String args[])

{

try

{

//Cargar clase de controlador de base de datos

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

//Crear el objeto de conexion a la base de datos

Connection conexion =

DriverManager.getConnection("jdbc:mysql://localhost/java?user=root&password=admin");

Statement instruccion = conexion.createStatement();

//Un objeto ResultSet, almacena los datos de resultados de una consulta

ResultSet tabla = instruccion.executeQuery("select Cod_materia, Nombre_materia,

Descripcion from materia");

System.out.println("Cod_materia\tNombre_materia\tDescripcion");

while(tabla.next())

System.out.println(tabla.getInt(1)+"\t"+tabla.getString(2)+"\t"+ tabla.getString(3));

instruccion.close();

conexion.close();

}

catch(ClassNotFoundException e){ System.out.println(e); }

catch(SQLException e){ System.out.println(e); }

}

}

Page 6: Guia7 java

GUÍA 6 pág. 6

Ejemplo No 2. Con SQL Server Nombre de la Clase ProgramaSQLServer.java

import java.sql.*;

public class ProgramaSQLServer {

/**

* @param args the command line arguments

*/

public static void main(String[] args)

{

// TODO code application logic here

try

{

//Cargar clase de controlador de base de datos

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//Crear el objeto de conexion a la base de datos

Connection conexion =

DriverManager.getConnection("jdbc:sqlserver://SQLSERVER:1433;databaseName=java;us

er=sa;password=sql2005");

//Crear objeto Statement para realizar queries a la base de datos

Statement instruccion = conexion.createStatement();

//Un objeto ResultSet, almacena los datos de resultados de una consulta

ResultSet tabla = instruccion.executeQuery("select Cod_materia, Nombre_materia,

Descripcion from materia");

System.out.println("Codigo de la materia\tNombre de la Materia\tDescripcion");

while(tabla.next())

System.out.println("\t"+tabla.getInt(1)+"\t\t"+tabla.getString(2)+"\t\t"+tabla.getString(3));

}

catch(ClassNotFoundException e){ System.out.println(e); }

catch(SQLException e){ System.out.println(e); }

}

}

Page 7: Guia7 java

GUÍA 6 pág. 7

Conexión a SQLServer 2005 con NetBeans IDE 6.1 Ejemplo No 3.

1. Primeramente hay que agregar al proyecto una java class que tendrá el Nombre de Conexion1.java

2. Agregar al proyecto un contenedor de JFrame Form con el nombre de

JFMantenimientoAlumno.java. Y hacer los cambios que se muestran en la tabla

de la figura 1.

Figura 1.

public class Conexion1

{

//Nombre del controlador JDBC y URL de la base de datos

static final String CONTROLADOR_JDBC =

"com.microsoft.sqlserver.jdbc.SQLServerDriver";

static final String URL_BASEDEDATOS =

"jdbc:sqlserver://SQLSERVER:1433;databaseName=java;user=sa;password=sql2005";}

Page 8: Guia7 java

GUÍA 6 pág. 8

Control Propiedad Eventos Código Valor JFrame title Formulario de

Estudiantes

JLabel1 font

text

Tahoma 18 Bold

Mantenimiento

de Estudiante.

JPanel1 border Titled Border Información de

Estudiante.

JLabel2 text Codigo:

JLabel3 text Apellidos:

JLabel4 text Nombres:

JTextField text Variable Name ecodigo

JTextField text Variable Name eapellidos

JTextField text Variable Name enombres

JPanel2 border Titled Border Mantenimientos

JButton text

actionPerformed

Variable Name

Buscar

buscar

mbuscar

JButton text

actionPerformed

Variable Name

Insertar

insertar

minsertar

JButton text

actionPerformed

Variable Name

Borrar

borrar

mborrar

JButton text

actionPerformed

Variable Name

Salir

salir

msalir

Page 9: Guia7 java

GUÍA 6 pág. 9

import java.sql.*;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.JOptionPane;

import java.sql.Connection;

import java.sql.DriverManager;

public class JFMantenimientoAlumno extends javax.swing.JFrame

{

private Connection conexion;

private Statement instruccion;

private ResultSet conjuntoResultados;

/** Creates new form JFMantenimientoAlumno */

public JFMantenimientoAlumno() throws SQLException

{

initComponents();

try

{

Class.forName(Conexion1.CONTROLADOR_JDBC);

conexion = DriverManager.getConnection( Conexion1.URL_BASEDEDATOS );

instruccion= conexion.createStatement();

}

catch(ClassNotFoundException e )

{

JOptionPane.showMessageDialog(null,e.getMessage(),"Error en los controladores

JDBC", JOptionPane.ERROR_MESSAGE);

}

catch(SQLException e)

{

JOptionPane.showMessageDialog(null,e.getMessage(),"Error en la base de datos",

JOptionPane.ERROR_MESSAGE);

}

}

/** This method is called from within the constructor to

* initialize the form.

* WARNING: Do NOT modify this code. The content of this method is

* always regenerated by the Form Editor.

*/

@SuppressWarnings("unchecked")

Page 10: Guia7 java

GUÍA 6 pág. 10

private void salir(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

System.exit(0);

}

private void borrar(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

ecodigo.setText("");

enombres.setText("");

eapellidos.setText("");

}

private void buscar(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

String consulta="";

consulta= "select Cod_alumno, Apellidos, Nombres from alumno where Cod_alumno

='" + ecodigo.getText().toString() + "'";

try

{

conjuntoResultados= instruccion.executeQuery(consulta);

while (conjuntoResultados.next())

{

eapellidos.setText(conjuntoResultados.getString(2));

enombres.setText(conjuntoResultados.getString(3));

}

}

catch(SQLException e)

{

JOptionPane.showMessageDialog(null, e.getMessage(),"Error al mostrar los datos.",

JOptionPane.ERROR_MESSAGE);

}

}

Page 11: Guia7 java

GUÍA 6 pág. 11

private void insertar(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

String insertar="";

insertar = "insert into alumno (Cod_alumno, Apellidos, Nombres) values ('" +

ecodigo.getText().toString()+ "'" + ",'" + eapellidos.getText().toString() +

"','" + enombres.getText().toString() + "')";

try

{

if (ecodigo.getText().equals(""))

{

JOptionPane.showMessageDialog(rootPane,"Espeficar el codigo de Estudiante y

Materia");

}

else

{

instruccion.executeUpdate(insertar);

JOptionPane.showMessageDialog(rootPane, "Registrado Estudiante con Exito !!");

}

}

catch (SQLException e)

{

JOptionPane.showMessageDialog(null, e.getMessage(), "Error en la base de datos",

JOptionPane.ERROR_MESSAGE);

}

}

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

try {

new JFMantenimientoAlumno().setVisible(true);

} catch (SQLException ex) {

Logger.getLogger(JFMantenimientoAlumno.class.getName()).log(Level.SEVERE, null,

ex);

}

}

});

}

Page 12: Guia7 java

GUÍA 6 pág. 12

3- Crear un formulario de mantenimiento para la tabla materia

// Variables declaration - do not modify

private javax.swing.JTextField eapellidos;

private javax.swing.JTextField ecodigo;

private javax.swing.JTextField enombres;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JLabel jLabel4;

private javax.swing.JPanel jPanel1;

private javax.swing.JPanel jPanel2;

private javax.swing.JButton mborrar;

private javax.swing.JButton mbuscar;

private javax.swing.JButton minsertar;

private javax.swing.JButton msalir;

// End of variables declaration

}