Download Capitulo 6 Programación de Base de Datos En 1996, Sun liberó la

Document related concepts
no text concepts found
Transcript
Capitulo 6
Programación de Base de Datos
En 1996, Sun liberó la primera versión de la API de JDBC - Java DataBase Connectivity
(Conectividad de Base de Datos). Esta API deja a programadores conectarse a una base
de datos y luego consultar o actualizarlo, usando el Lenguaje Estructurado de Consulta
(SQL- Structure Query Languaje). (SQL "sequel" pronunciada generalmente, es un
estándar de la industria para el acceso a Base de Datos Relacionales.) JDBC se ha
convertido en uno de los API más comúnmente usadas en la biblioteca de Java desde ese
entonces.
El diseño de JDBC
JDBC para la comunicación con la Base de Datos
Conexión con Base de Datos
1) Crear la Base de Datos
Para esta tarea se puede utilizar Microsoft Access, MySql, Postgress y otros gestores de
Base de Datos.
La estructura es la siguiente, para el ejemplo tomaremos Microsoft Access:
Nombre Base de Datos: Prueba
Nombre de Tabla: Person
2) Crear la conexión ODBC
a) En el menú inicio elegir la opción
b) Luego elegir la opción
c) En herramientas administrativas elegir la opción
3) En este formulario elegir el botón agregar:
4) Luego seleccionar el Driver do Microsoft Access (*.mdb) que permite seleccionar la Base
de Datos presionar el botón Finalizar.
5) En la siguiente ventana, en el Nombre del origen de datos: coloque un nombre corto (que
es la cadena de conexión) y haga clic en el botón Seleccionar la Base Datos para enlazar a
la Base Datos y hacer referencia en el código de Programación Java:
6) Una vez creado la cadena este aparece en la ventana principal como se muestra a
continuación:
7) Finalmente en el código de programación Java haga referencia a la cadena de conexión.
1) Clase PersonInfo.java
public class PersonInfo
{
private String name,address,email;
private int id, phone;
// constructor por defecto
public PersonInfo()
{
name = "";
address = "";
email = "";
id = 0;
phone = 0;
}
public PersonInfo(int id, String name, String address, int phone,
String email)
{
this.id = id;
this.name = name;
this.address = address;
this.phone = phone;
this.email = email;
}
// constructor con 4 valores
public PersonInfo(String name, String address, int phone, String
email)
{
this.name = name;
this.address = address;
this.phone = phone;
this.email = email;
}
// setters
public void setId(int i)
{
id = i;
}
public void setName(String n)
{
name=n;
}
public void setAddress(String a)
{
address=a;
}
public void setPhone(int ph)
{
phone=ph;
}
public void setEmail(String e)
{
email=e;
}
// getters
public int getId( )
{
return id;
}
public String getName()
{
return name;
}
public String getAddress()
{
return address;
}
public int getPhone()
{
return phone;
}
public String getEmail()
{
return email;
}
}
2) Clase PersonDAO.java
import java.util.*;
import java.sql.*;
public class PersonDAO{
/* Tabla Person se debe crear.
* create table Person (
id Integer,
name Varchar(30),
address Varchar(30),
phone Integer,
email Varchar(50)
);*/
// Para Postgress
//private ArrayList personsList;
//private String userid = "postgres";
//private String password = "postgres";
//static String url = "jdbc:postgresql://localhost/ug";
//Para Access
private ArrayList personsList;
private String userid = "";
private String password = "";
static String url = "jdbc:odbc:cnn";
private Connection con;
// constructor
public PersonDAO(){
personsList = new ArrayList();
getConnection();
//Crea Conexion a la base de datos
}
public Connection getConnection(){
try {
Class.forName("sun.jdbc.odbc:JdbcOdbcDriver");
} catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
try {
con = DriverManager.getConnection(url, userid,
password);
} catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
}
return con;
}
public ArrayList searchPerson(String name)
{
try
{
String sql = "SELECT * FROM Person WHERE name like
'%"+name+"%'";
// Crea una declaracion preparada
Statement s = con.createStatement();
ResultSet rs = s.executeQuery(sql);
String pname = "";
String address = "";
String email = "";
int id, phone;
while(rs.next())
{
id = rs.getInt("id");
pname = rs.getString("name");
address = rs.getString("address");
phone = rs.getInt("phone");
email = rs.getString("email");
//Crea un objeto PersonInfo
PersonInfo person = new PersonInfo(id, pname,
address, phone, email);
//Adiciona el objeto person a una lista
personsList.add(person);
}
}
catch(Exception e){
System.out.println(e);
}
return personsList;
}
public void savePerson(PersonInfo person){
try
{
String sql = "INSERT INTO Person(name, address, " +
"phone, email) VALUES (?,?,?,?)
";
// Crea una Prepared statement ya preparada
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, person.getName());
ps.setString(2, person.getAddress());
ps.setInt(3, person.getPhone());
ps.setString(4, person.getEmail());
ps.executeUpdate();
}
catch(Exception e){
System.out.println(e);
}
}
public void updatePerson(PersonInfo person)
{
try
{
String sql = "UPDATE Person SET name = ?, address=? , "
+
"phone=? , email=? where id=?";
// Crea una Prepared statement
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1 , person.getName());
ps.setString(2 , person.getAddress());
ps.setInt(3 , person.getPhone());
ps.setString(4 , person.getEmail());
ps.setInt(5 , person.getId());
ps.executeUpdate();
}
catch(Exception e){
System.out.println(e);
}
}
public int removePerson(String name){
int no = 0;
try{
String sql = "DELETE FROM Person WHERE name = ?";
// Crea una Prepared statement
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, name);
no = ps.executeUpdate();
}
catch(Exception e){
System.out.println(e);
}
return no;
}
}// fin class PersonDAO
3) Clase AddressBookDemo.java
import
import
import
import
import
import
import
java.awt.Container;
java.awt.GridBagConstraints;
java.awt.GridBagLayout;
java.awt.Insets;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
java.util.ArrayList;
import
import
import
import
import
javax.swing.JButton;
javax.swing.JFrame;
javax.swing.JLabel;
javax.swing.JOptionPane;
javax.swing.JTextField;
public class AddressBookDemo implements ActionListener
{
ArrayList personsList;
PersonDAO pDAO;
JFrame appFrame;
JLabel jlbName, jlbAddress, jlbPhone, jlbEmail;
JTextField jtfName, jtfAddress, jtfPhone, jtfEmail;
JButton jbbSave, jbnDelete, jbnClear, jbnUpdate, jbnSearch,
jbnForward, jbnBack, jbnExit;
String name, address, email;
int phone;
int recordNumber; // usados para navegar usando los botones >> y <<
Container cPane;
public static void main(String args[]){
new AddressBookDemo();
}
public AddressBookDemo()
{
name
= "";
address = "";
email = "";
phone
= 0 ;
//Almacena 0 para indicar que no hay numero
de telefono
recordNumber = -1;
createGUI();
personsList = new ArrayList();
// creando un objeto PersonDAO
pDAO = new PersonDAO();
}
public void createGUI(){
/*Crea un frame, obtiene su contentpane y define su layout*/
appFrame = new JFrame("Agenda");
cPane = appFrame.getContentPane();
cPane.setLayout(new GridBagLayout());
//coloca los componentes en contentPane y define Action
Listeners para cada JButton
arrangeComponents();
appFrame.setSize(280,300);
appFrame.setResizable(false);
appFrame.setVisible(true);
appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void arrangeComponents(){
jlbName = new JLabel("Nombre");
jlbAddress = new JLabel("Direccion");
jlbPhone = new JLabel("telefono");
jlbEmail = new JLabel("Email");
jtfName
jtfAddress
jtfPhone
jtfEmail
jbbSave
jbnDelete
jbnClear
jbnUpdate
jbnSearch
=
=
=
=
=
=
=
=
=
new
new
new
new
new
new
new
new
new
JTextField(20);
JTextField(20);
JTextField(20);
JTextField(20);
JButton("Grabar");
JButton("Borrar");
JButton("Limpiar");
JButton("Actualizar");
JButton("Buscar");
jbnForward = new JButton(">>");
jbnBack
= new JButton("<<");
jbnExit
= new JButton("Salir");
/*adiciona todos los componentes inicializados al container*/
GridBagConstraints gridBagConstraintsx01 = new
GridBagConstraints();
gridBagConstraintsx01.gridx = 0;
gridBagConstraintsx01.gridy = 0;
gridBagConstraintsx01.insets = new Insets(5,5,5,5);
cPane.add(jlbName, gridBagConstraintsx01);
GridBagConstraints gridBagConstraintsx02 = new
GridBagConstraints();
gridBagConstraintsx02.gridx = 1;
gridBagConstraintsx02.insets = new Insets(5,5,5,5);
gridBagConstraintsx02.gridy = 0;
gridBagConstraintsx02.gridwidth = 2;
gridBagConstraintsx02.fill = GridBagConstraints.BOTH;
cPane.add(jtfName, gridBagConstraintsx02);
GridBagConstraints gridBagConstraintsx03 = new
GridBagConstraints();
gridBagConstraintsx03.gridx = 0;
gridBagConstraintsx03.insets = new Insets(5,5,5,5);
gridBagConstraintsx03.gridy = 1;
cPane.add(jlbAddress, gridBagConstraintsx03);
GridBagConstraints gridBagConstraintsx04 = new
GridBagConstraints();
gridBagConstraintsx04.gridx = 1;
gridBagConstraintsx04.insets = new Insets(5,5,5,5);
gridBagConstraintsx04.gridy = 1;
gridBagConstraintsx04.gridwidth = 2;
gridBagConstraintsx04.fill = GridBagConstraints.BOTH;
cPane.add(jtfAddress, gridBagConstraintsx04);
GridBagConstraints gridBagConstraintsx05 = new
GridBagConstraints();
gridBagConstraintsx05.gridx = 0;
gridBagConstraintsx05.insets = new Insets(5,5,5,5);
gridBagConstraintsx05.gridy = 2;
cPane.add(jlbPhone, gridBagConstraintsx05);
GridBagConstraints gridBagConstraintsx06 = new
GridBagConstraints();
gridBagConstraintsx06.gridx = 1;
gridBagConstraintsx06.gridy = 2;
gridBagConstraintsx06.insets = new Insets(5,5,5,5);
gridBagConstraintsx06.gridwidth = 2;
gridBagConstraintsx06.fill = GridBagConstraints.BOTH;
cPane.add(jtfPhone, gridBagConstraintsx06);
GridBagConstraints gridBagConstraintsx07 = new
GridBagConstraints();
gridBagConstraintsx07.gridx = 0;
gridBagConstraintsx07.insets = new Insets(5,5,5,5);
gridBagConstraintsx07.gridy = 3;
cPane.add(jlbEmail, gridBagConstraintsx07);
GridBagConstraints gridBagConstraintsx08 = new
GridBagConstraints();
gridBagConstraintsx08.gridx = 1;
gridBagConstraintsx08.gridy = 3;
gridBagConstraintsx08.gridwidth = 2;
gridBagConstraintsx08.insets = new Insets(5,5,5,5);
gridBagConstraintsx08.fill = GridBagConstraints.BOTH;
cPane.add(jtfEmail, gridBagConstraintsx08);
GridBagConstraints gridBagConstraintsx09 = new
GridBagConstraints();
gridBagConstraintsx09.gridx = 0;
gridBagConstraintsx09.gridy = 4;
gridBagConstraintsx09.insets = new Insets(5,5,5,5);
cPane.add(jbbSave, gridBagConstraintsx09);
GridBagConstraints gridBagConstraintsx10 = new
GridBagConstraints();
gridBagConstraintsx10.gridx = 1;
gridBagConstraintsx10.gridy = 4;
gridBagConstraintsx10.insets = new Insets(5,5,5,5);
cPane.add(jbnDelete, gridBagConstraintsx10);
GridBagConstraints gridBagConstraintsx11 = new
GridBagConstraints();
gridBagConstraintsx11.gridx = 2;
gridBagConstraintsx11.gridy = 4;
gridBagConstraintsx11.insets = new Insets(5,5,5,5);
cPane.add(jbnUpdate, gridBagConstraintsx11);
GridBagConstraints gridBagConstraintsx12 = new
GridBagConstraints();
gridBagConstraintsx12.gridx = 0;
gridBagConstraintsx12.gridy = 5;
gridBagConstraintsx12.insets = new Insets(5,5,5,5);
cPane.add(jbnBack, gridBagConstraintsx12);
GridBagConstraints gridBagConstraintsx13 = new
GridBagConstraints();
gridBagConstraintsx13.gridx = 1;
gridBagConstraintsx13.gridy = 5;
gridBagConstraintsx13.insets = new Insets(5,5,5,5);
cPane.add(jbnSearch, gridBagConstraintsx13);
GridBagConstraints gridBagConstraintsx14 = new
GridBagConstraints();
gridBagConstraintsx14.gridx = 2;
gridBagConstraintsx14.gridy = 5;
gridBagConstraintsx14.insets = new Insets(5,5,5,5);
cPane.add(jbnForward, gridBagConstraintsx14);
GridBagConstraints gridBagConstraintsx15 = new
GridBagConstraints();
gridBagConstraintsx15.gridx = 1;
gridBagConstraintsx15.insets = new Insets(5,5,5,5);
gridBagConstraintsx15.gridy = 6;
cPane.add(jbnClear, gridBagConstraintsx15);
GridBagConstraints gridBagConstraintsx16 = new
GridBagConstraints();
gridBagConstraintsx16.gridx = 2;
gridBagConstraintsx16.gridy = 6;
gridBagConstraintsx16.insets = new Insets(5,5,5,5);
cPane.add(jbnExit, gridBagConstraintsx16);
jbbSave.addActionListener(this);
jbnDelete.addActionListener(this);
jbnClear.addActionListener(this);
jbnUpdate.addActionListener(this);
jbnSearch.addActionListener(this);
jbnForward.addActionListener(this);
jbnBack.addActionListener(this);
jbnExit.addActionListener(this);
}
public void actionPerformed (ActionEvent e){
if (e.getSource () == jbbSave){
savePerson();
clear();
}
else if (e.getSource() == jbnDelete){
deletePerson();
clear();
}
else if (e.getSource() == jbnUpdate){
updatePerson();
clear();
}
else if (e.getSource() == jbnSearch){
searchPerson();
}
else if (e.getSource() == jbnForward){
displayNextRecord();
}
else if (e.getSource() == jbnBack){
displayPreviousRecord();
}
else if (e.getSource() == jbnClear){
clear();
}
else if (e.getSource() == jbnExit){
System.exit(0);
}
}
// Guarda a la persona en la agenda
public void savePerson(){
name
= jtfName.getText();
name = name.toUpperCase();
//Almacena a todos los nombres
en mayusculas
address = jtfAddress.getText();
try{
phone = Integer.parseInt(""+jtfPhone.getText());
}catch(Exception e){
System.out.print("debe ingresar una cadena");
JOptionPane.showMessageDialog(null, "Digite un numero
de telefono");
}
email
= jtfEmail.getText();
if(name.equals("")){
JOptionPane.showMessageDialog(null, "Por favor digite
el nombre de una persona.");
}else{
//crea un objeto PersonInfo y le pasa un objeto
PersonDAO para almacenarlo
PersonInfo person = new PersonInfo(name, address,
phone, email);
pDAO.savePerson(person);
JOptionPane.showMessageDialog(null, "Persona
guardada");
}
}
public void deletePerson(){
name = jtfName.getText();
name = name.toUpperCase();
if(name.equals("")){
JOptionPane.showMessageDialog(null,"Por favor digite el
nombre de una persona.");
}
else{
//remueve una Persona con un nombre dado de la agenda
int numberOfDeleted = pDAO.removePerson(name);
JOptionPane.showMessageDialog(null, numberOfDeleted + "
Registro(s) borrado(s).");
}
}
public void updatePerson(){
if (recordNumber >= 0 && recordNumber < personsList.size())
{
PersonInfo person =
(PersonInfo)personsList.get(recordNumber);
int id = person.getId();
/*obtiene valores de los TextFields*/
name
= jtfName.getText();
address = jtfAddress.getText();
phone
= Integer.parseInt(jtfPhone.getText());
email
= jtfEmail.getText();
/*actualiza la informacion dado un nombre*/
person = new PersonInfo(id, name, address, phone, email);
pDAO.updatePerson(person);
JOptionPane.showMessageDialog(null, "Registro de la persona
actualizado con exito.");
}
else
{
JOptionPane.showMessageDialog(null, "No se actualizo
registro");
}
}
//Realiza una busqueda sin Case-Insensitive para buscar a una persona
public void searchPerson() {
name = jtfName.getText();
name = name.toUpperCase();
/*limpia contenidos del arraylist si hay algo de previas
busquedas*/
personsList.clear();
recordNumber = 0;
if(name.equals("")){
JOptionPane.showMessageDialog(null,"Por favor digite el
nombre para buscar.");
}
else{
/*obtiene un array list de las personas buscadas usando
PersonDAO*/
personsList = pDAO.searchPerson(name);
if(personsList.size() == 0){
JOptionPane.showMessageDialog(null, "No se
encontro.");
//Limpia si no se encuentra nada.
clear();
}
else
{
/*realiza un downcast del objeto del array list a
PersonInfo*/
PersonInfo person = (PersonInfo)
personsList.get(recordNumber);
// muestra el registro buscado en los textFields
jtfName.setText(person.getName());
jtfAddress.setText(person.getAddress());
jtfPhone.setText(""+person.getPhone());
jtfEmail.setText(person.getEmail());
}
}
}
public void displayNextRecord(){
// incrementa el recordNumber para desplegar la siguiente persona, ya
almacenada
// en personsList
recordNumber++;
if(recordNumber >= personsList.size()){
JOptionPane.showMessageDialog(null, "Llego al final de " +
"resultados de busqueda");
/*si el usuarios llega al final de los resultados,
deshabilita el boton >>*/
jbnForward.setEnabled(false);
jbnBack.setEnabled(true);
// decrementa en uno el contador del ultimo incremento
recordNumber -- ;
}
else{
jbnBack.setEnabled(true);
PersonInfo person = (PersonInfo)
personsList.get(recordNumber);
// despliega el registro buscado en loe testfields
jtfName.setText(person.getName());
jtfAddress.setText(person.getAddress());
jtfPhone.setText(""+person.getPhone());
jtfEmail.setText(person.getEmail());
}
}
public void displayPreviousRecord(){
// decrementa el recordNumber para mostrar la persona previa
recordNumber--;
if(recordNumber < 0 ){
JOptionPane.showMessageDialog(null, "Llego al principio " +
"de la busqueda");
/*si el usuario esta en el inicio deshabilita el boton
de <<*/
jbnForward.setEnabled(true);
jbnBack.setEnabled(false);
// incrementa en uno
recordNumber++;
}else{
jbnForward.setEnabled(true);
PersonInfo person = (PersonInfo)
personsList.get(recordNumber);
jtfName.setText(person.getName());
jtfAddress.setText(person.getAddress());
jtfPhone.setText(""+person.getPhone());
jtfEmail.setText(person.getEmail());
}
}
public void clear(){
jtfName.setText("");
jtfAddress.setText("");
jtfPhone.setText("");
jtfEmail.setText("");
recordNumber = -1;
personsList.clear();
jbnForward.setEnabled(true);
jbnBack.setEnabled(true);
}
}