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.
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_materiatNombre_materiatDescripcion");
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.
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. }
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_materiatNombre_materiatDescripcion");
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); }
}
}
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 materiatNombre de la MateriatDescripcion");
while(tabla.next())
System.out.println("t"+tabla.getInt(1)+"tt"+tabla.getString(2)+"tt"+tabla.getString(3));
}
catch(ClassNotFoundException e){ System.out.println(e); }
catch(SQLException e){ System.out.println(e); }
}
}
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";}
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
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")
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);
}
}
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);
}
}
});
}
// 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
3- Crear un formulario de mantenimiento para la tabla materia