BASE DE DATOS
JAVA - ACCESS
Database Connectivity) Connectivity) conocido por la En java se tiene un API (Java Database abreviación JDBC gracias al JDK (Java Development Kit)
Considerando que se trabaja en una plataforma Windows con SQL Server, Access. El puente JDBC-ODBC ODBC (Open Database Connectivity) de Microsoft hecho en lenguaje C JDBC (Java Database Connectivity) El ODBC se comunica con la base de datos y el JDBC con el ODBC.
Ejemplo de conexión:
1 Crear Base de datos
Alumnos
en Ms Access
Tabla : Alumnos
Tabla: Notas
Contendrá los siguientes registros: Página 1
Tabla: Alumnos
Tabla: Notas
Relacionando las 2 Tablas
2. Construir el DSN(Data Source Name) mediante ODBC. Tener en cuenta que para tal propósito se tiene que utilizar:
import java.sql.*;
Además: DB 1ro
ODBC Hacer el DSN
JDBC
Aplicación en Java
Usar objetos
Se desarrolla
Connection
Como termino
Statement ResulSet Página 2
Clases básicas para JDBC Son de vital importancia: Connection: Permite la conexión a la base de datos. Origina un canal
entre nuestra aplicación y la base de datos. Statement: Este objeto nos permite ejecutar una sentencia SQL( select,
insert, update y delete) ResulSet: Si el objeto Statement ejecuta una sentencia select del SQL,
entonces, este devuelve un conjunto de resultados. Este conjunto de resultados es asignado y manipulado por un objeto ResulSet ResulSetMetaData: Un objeto de esta clase tiene información meta sobre el
conjunto de resultados, como, por ejemplo: cuantas columnas tiene la consulta, los nombres de las columnas, los tipos de datos que guarda cada columna, cuantas filas, etc.
1
2
Página 3
3.
4
5.
Página 4
6. Luego Aceptar, Aceptar... Listo Ok, A continuación los ejemplos: Conexión a una base de datos Java - Ms Access
Paquete : Com Formulario: package com; import javax.swing.*; import java.awt.event.*; class Formulario extends JFrame { static int wF= 600, hF= 300; public Formulario(String s) { super(s); getContentPane().add(new MiPanel()); setLocation((getToolkit().getScreenSize().width - wF)/2, (getToolkit().getScreenSize().height - hF)/2); } Página 5
static public void main(String[] arg) { JFrame f= new Formulario("Mantenimiento en una Base de Datos Access con 2 tablas"); f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); f.setSize(wF, hF); f.setVisible(true); } }
MiPanel: package com; import java.awt.*; import java.awt.event.*; import javax.swing.*; import ventanas.*; public class MiPanel extends JPanel implements ActionListener { JButton insAlumno= new JButton("Nuevo Alumno"); JButton insNota= new JButton("Nueva Nota"); JButton query= new JButton("Consulta"); String sql= "Select Alumno, Format(Avg(Nota),'0#.00') as Promedio " + "from Alumnos left join Notas " + "On Alumnos.idAlumno=Notas.idAlumno " + "Group By Alumno"; JDBTable jt= new JDBTable(sql); public MiPanel() { setLayout(new BorderLayout()); query.addActionListener(this); add(query, BorderLayout.NORTH); add(new JScrollPane(jt), BorderLayout.CENTER); JPanel p= new JPanel(); p.setLayout(new GridLayout(1,2)); p.add(insAlumno); insAlumno.addActionListener(this); p.add(insNota); insNota.addActionListener(this); Página 6
add(p, BorderLayout.SOUTH); } public void actionPerformed(ActionEvent e) { if(e.getSource() == query) jt.formaMiTabla(sql); if(e.getSource() == insAlumno) new Formulario2("Nuevo Alumno", new PanInsAlumno(), 300,160); if(e.getSource() == insNota) new Formulario2("Nueva Nota", new PanInsNota(), 300,240); } }
PanInsAlumno: package com; import java.awt.*; import java.awt.event.*; import javax.swing.*; import db.*; import ventanas.*; public class PanInsAlumno extends JPanel implements ActionListener { JTextField nombre= new JTextField(); JButton acepta= new JButton("Grabar"); public PanInsAlumno() { setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); setLayout(new GridLayout(2,1,1,10)); nombre.setBorder(BorderFactory.createTitledBorder("Alumno")); nombre.setOpaque(false); add(nombre); add(acepta);
acepta.addActionListener(this);
} public void actionPerformed(ActionEvent e) { String n= nombre.getText().trim(); if(n.length()!=0) { String m= MiSQL.ejecuta("Insert into Alumnos(Alumno) Values('" +n+ "')"); Página 7
} // cierra el formulario ((Formulario2) getTopLevelAncestor()).dispose(); } }
PanInsNota: package com; import import import import
java.awt.*; java.awt.event.*; javax.swing.*; java.util.Vector;
import db.*; import ventanas.*; public class PanInsNota extends JPanel implements ActionListener { JDBComboBox alumno= new JDBComboBox("Select Alumno From Alumnos"); JComboBox nota= new JComboBox(); JButton acepta= new JButton("Grabar"); public PanInsNota() { setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); setLayout(new GridLayout(3,1,1,10)); alumno.setBorder(BorderFactory.createTitledBorder("Alumno")); nota.setBorder(BorderFactory.createTitledBorder("Nota")); for(int i=0; i<=20; ++i) nota.addItem("" + i); nota.setSelectedIndex(14); add(alumno); add(nota); add(acepta);
acepta.addActionListener(this);
} public void String String String
actionPerformed(ActionEvent e) { a= (String) alumno.getSelectedItem(); n= (String) nota.getSelectedItem(); i= null;
// obteniendo idAlumno Página 8
Vector id= MiSQL.consulta("Select idAlumno From Alumnos Where Alumno like '" + a + "'"); if(id!=null) { i= ((String[]) id.elementAt(1))[0]; // Insertando nota String m= MiSQL.ejecuta("Insert into Notas Values(" + i + "," + n + ")"); if(m!=null) JOptionPane.showMessageDialog(null, "Error:" + m); } // cierra el formulario ((Formulario2) getTopLevelAncestor()).dispose(); } }
Paquete : Db MiConnection: package db; import java.sql.*; public class private private private private
MiConnection { String driver= "sun.jdbc.odbc.JdbcOdbcDriver"; String url= "jdbc:odbc:dsnDatos"; String login= ""; String password= "";
public Connection getConnection() { Connection cn=null; try{ Class.forName(driver); cn= DriverManager.getConnection(url, login, password); } catch(SQLException e) { System.out.println(e.toString()); } catch(Exception e) { System.out.println(e.toString()); } return cn; } }
MiSQL: Página 9
package db; import java.sql.*; import java.util.Vector; public final class MiSQL { // Ejecuta Insert, Delete y Update static public String ejecuta(String sql) { String mensaje= null; try
{
MiConnection x= new MiConnection(); Connection cn= x.getConnection(); Statement st= cn.createStatement(); st.execute(sql);
st.close(); cn.close(); } catch(SQLException e) { mensaje= e.getMessage(); } catch(Exception e) { mensaje= e.getMessage(); } return mensaje; } // Ejecuta Select simple. En su retorno la fila 0 tiene los títulos de las columnas static public Vector consulta(String sql) { Vector regs= new Vector(); try
{
MiConnection Connection Statement ResultSet rs= ResultSetMetaData int
x= new MiConnection(); cn= x.getConnection(); st= cn.createStatement(); st.executeQuery(sql); rm= rs.getMetaData(); numCols= rm.getColumnCount();
// Toma los títulos de las columnas String[] titCols= new String[numCols]; for(int i=0; i
reg[i]= rs.getString(i + 1); regs.add(reg); } rs.close(); st.close(); cn.close(); } catch(SQLException e) { regs= null; } catch(Exception e) { regs= null; } return regs; } }
Paquete : ventanas Formulario2: package ventanas; import javax.swing.*; import java.awt.event.*; public class Formulario2 extends JFrame { public Formulario2(String titulo, JPanel panel, int wF, int hF) { super(titulo); getContentPane().add(panel); setLocation((getToolkit().getScreenSize().width - wF)/2, (getToolkit().getScreenSize().height - hF)/2); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { setVisible(false); dispose(); } }); setSize(wF, hF); setVisible(true); } }
JDBComboBox: Página 11
package ventanas; import javax.swing.*; import java.sql.*; import db.*; public class JDBComboBox extends JComboBox { public JDBComboBox(String sql) { try { MiConnection con= new MiConnection(); Connection cn= con.getConnection(); Statement st= cn.createStatement(); ResultSet rs= st.executeQuery(sql); while(rs.next()) addItem(rs.getString(1));
// toma
primera columna cn.close(); } catch(Exception ex) { String s="La consulta fracasó por:\n\n" + ex.toString(); JOptionPane.showMessageDialog(null,s,"Error",JOptionPane.ERROR_MESSA GE); } } }
JDBTable: package ventanas; import import import import
javax.swing.*; javax.swing.table.*; java.util.Vector; java.sql.*;
import db.*; public class JDBTable extends JTable { Vector cache; int colCount; String[] headers; public JDBTable(String query) { setModel(formaMiTabla(query)); } Página 12
public final TableModel formaMiTabla(String query) { cache= new Vector(); try {
MiConnection con= new MiConnection(); Connection cn= con.getConnection(); Statement st= cn.createStatement(); ResultSet rs= st.executeQuery(query); ResultSetMetaData meta = rs.getMetaData(); colCount = meta.getColumnCount(); // Poniendo nombres de columnas headers= new String[colCount]; for(int h=1; h<=colCount; h++) { headers[h-1]= meta.getColumnName(h); } while(rs.next()) { String[] record= new String[colCount];
for(int i=0; i
} }; } }
Resultados:
Página 14