Sunteți pe pagina 1din 50

CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Componentes y Mantenimiento para Base de Datos


En este capítulo aprenderá algo más sobre base de datos, para esto
trabajaremos con MySQL y PostgreSQL, dos gestores de base de datos que se
acoplan muy bien para el desarrollo de aplicaciones con Java y en los que
desarrollaremos nuestras tablas de datos.

Asimismo veremos un administrador de desarrollo visual de base de datos que


nos permitirá hacer las operaciones visuales tanto para MySQL como para
PostgreSQL, e inclusive para otras más. Este administrador visual es el
DBManager Professional, y nos permitirá mediante diálogos ingresar las
características de nuestros recipientes de datos.

Finalmente se presentarán aplicaciones basadas en componentes para dar


mantenimiento en ambas bases de datos (MySQL y PostgreSQL).

Instalación de MySQL
Deberá descargar el archivo mysql-5.0.16-win32.zip (última versión a la fecha)
de la dirección http://dev.mysql.com/ Una vez que ya lo tenga, debe
descomprimirlo en una carpeta temporal y entonces verá , que es el
archivo de instalación, proceda a dar doble clic sobre el y guíese de las
siguientes imágenes para la instalación:

133
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

134
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

135
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

136
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

137
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

MySQL por defecto crea el usuario: root


Se recomienda, por los ejemplos que siguen, poner como password: admin.
En el siguiente diálogo:

138
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

139
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Trabajando en Consola
Ejecutar la consola (Command Prompt) de interprete de comandos e ingresar a
la carpeta bin de MySQL (Program Files\MySQL\MySQL Server 5.0\bin\) en
esa ruta activará el programa mysql.exe de la siguiente forma:

mysql –u root –p

Luego ingresar el password (admin), entonces el prompt cambia a: mysql>


Ingrese la sentencia: show databases;

Ver imagen:

Ahora que ya está en consola pruebe las siguientes líneas:

mysql>create database prueba;


mysql>show databases;
mysql>create table personas(nombre varchar(60), edad int);
mysql>show tables;
mysql>insert into personas values('Juan Pérez',30);
mysql>insert into personas values('Ana Sandoval',25);
mysql>select * from personas;
mysql>drop database prueba;

mysql>quit

140
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Instalación de PostgreSQL
Deberá descargar el archivo postgresql-8.1.0-2.zip (última versión a la fecha)
de la dirección http://www.postgresql.org/ Una vez que ya lo tenga, debe
descomprimirlo en una carpeta temporal y entonces verá , que
es el archivo de instalación, proceda a dar doble clic sobre el y guíese de las
siguientes imágenes para la instalación:

141
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

142
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Clic en el botón Next de la siguiente imagen para que el mismo PostgreSQL


cree la cuenta del servicio en el sistema:

143
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Clic en el botón Yes:

Se recomienda, por los ejemplos que siguen, poner como password: admin, en
el siguiente diálogo:

144
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Deje todo por defecto en los siguientes diálogos:

145
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

146
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

147
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Trabajando en Consola
Ejecutar la consola (Command Prompt) de interprete de comandos e ingresar a
la carpeta bin de MySQL (Program Files\PostgreSQL\8.1\bin\) en esa ruta
activará el programa psql.exe de la siguiente forma: psql –U postgres

Luego ingresar el password (admin), entonces el prompt cambia a: postgres=#


Ingrese la sentencia: select datname from pg_database;

La sentencia anterior era para ver las bases de datos existentes en


PostgreSQL,ver imagen:

Siga probando las siguientes sentencias para crear la base de datos prueba y
conectarse a ella (postgres=# \connect prueba):

148
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

El prompt cambia al nombre de la base de datos en uso. Siga probando las


siguientes sentencias:

prueba=# create table personas(nombre varchar(60), edad int);


prueba=# insert into personas values('Juan Pérez',30);
prueba=# insert into personas values('Ana Sandoval',25);
prueba=# select * from personas;

prueba-# \connect postgres


postgres=# drop database prueba;

postgres=# \q

149
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Instalación de DBManager
En la dirección http://www.dbtools.com.br/EN/downloads/ encontrará diversas
versiones de DBManager para descargar:

150
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Necesitamos por supuesto descargar el DBManager Freeware for MySQL y el


DBManager Freeware for PosgreSQL, en todo caso también podrá trabajar
muy bien con el DBManager Professional Enterprise Edition (TRIAL), pero esta
última solo le durará unos días, pues hay que pagar por la licencia.

Los archivos descargados, freeware, para los 2 primeros casos (MySQL y


PostreSQL) son: y
Entonces procedemos a su instalación guiándonos de las siguientes imágenes
(para el caso de MySQL):

151
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

152
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

153
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

154
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

155
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

El DBManager en ejecución por primera vez:

156
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Si ya tiene instalado MySQL, debemos hacer que el DBManager lo reconozca,


para esto seleccionamos la ficha Servers y damos clic en Add New Server:

En el diálogo poner el Password (admin) y clic en Aceptar:

157
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Entonces se registra el gestor MySQL y ahora podrá administrar todo


visualmente desde el DBManager:

Crear una base de datos


Vamos a crear una base
de datos de nombre
alumnos, para eso
deberá clic derecho sobre
el nodo Databases y en
el menú desplegable que
se muestra, seleccione la
opción Create Database.

Más adelante esta base


de datos tendrá 2 tablas
relacionadas, y serán:
alumnos y notas.

Ambas tablas tienen una


relación de uno a muchos
a través de un primary
key y un foreign key.
Además la actualización será en cascada, es decir si se elimina un alumno que
tiene notas, entonces por el diseño, todos las filas de la tabla notas relacionadas
a este alumno serán eliminadas también.
158
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Guiarse de las siguientes imágenes para el desarrollo:

159
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

La columna idAlumno:

La columna nombre:

Clic en el toolbar Save y ponga como nombre de la tabla alumnos:

De la misma forma desarrolle la tabla notas (idAlumno solo tiene los atributos
que ve):
160
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Ahora debemos relacionar la tabla notas con la tabla alumnos a través de un


foreing key, para eso seleccione el nodo Tables de la base de datos alumnos
de la ventana Workspace, entonces, seleccione la tablas notas, clic derecho
sobre ella y escoja la opción Properties:

161
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

En el diálogo Table Properties clic en el botón New para hacer una nueva
relación. En el área Primary Key seleccione la tabla alumnos, en PK Column
seleccione idAlumno y también en FK Column seleccione idAlumno. Por
último, para cambios en cascada sobre la tabla notas, en On Update seleccione
CASCADE y On Delete seleccione CASCADE. Finalmente clic en Aceptar:

162
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Ingresaremos filas de datos, entonces dar clic derecho sobre la tabla alumnos y
seleccionar la opción Get Data:

Estos son los datos para las tablas:

Para la tabla alumnos Para la tabla notas


(NO ingrese idAlumno, pues se auto (Ingrese los mismos datos que ve, por
generan) ejercicios que vendrán luego)

163
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Desarrollando algunas consultas:

Escriba su sentencia Select y clic en el botón Execute o puse F5:

164
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Asimismo, pruebe las siguientes sentencias:

-- [02] Mostrar nombre de alumnos con sus respectivas notas en Orden


alfabético

SELECT nombre, nota


FROM alumnos INNER JOIN notas
ON alumnos.idAlumno=notas.idAlumno
ORDER BY nombre

-- [03] Mostrar nombre de alumno y cuántas notas tiene cada uno

SELECT nombre, COUNT(nota) AS 'Cantidad de notas'


FROM alumnos INNER JOIN notas
ON alumnos.idAlumno=notas.idAlumno
GROUP By nombre
ORDER BY nombre

-- [04] Mostrar nombre de alumno y su respectivo promedio en orden de


mérito

SELECT nombre, AVG(nota) AS Promedio


FROM alumnos INNER JOIN notas
165
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

ON alumnos.idAlumno=notas.idAlumno
GROUP By nombre
ORDER BY 2 DESC

SELECT nombre, ROUND(AVG(nota),2) AS Promedio


FROM alumnos INNER JOIN notas
ON alumnos.idAlumno=notas.idAlumno
GROUP By nombre
ORDER BY 2 DESC

-- [06] Nombre con más de 2 notas y con su respectivo promedio en orden


de mérito

SELECT nombre, AVG(nota) AS Promedio


FROM alumnos INNER JOIN notas
ON alumnos.idAlumno=notas.idAlumno
GROUP By nombre
HAVING COUNT(nota)>2
ORDER BY nombre DESC

-- [07] Seleccione alumnos que tienen como nota un 11 o un 12

SELECT nombre, nota


FROM alumnos INNER JOIN notas
ON alumnos.idAlumno=notas.idAlumno
WHERE notas.nota=11 OR notas.nota=12
ORDER BY nombre

-- [08] Seleccione alumnos que tienen las notas 11 y 12

SELECT nombre
FROM alumnos
WHERE idAlumno IN
(SELECT idAlumno
FROM notas
WHERE nota=12 AND idAlumno IN
(SELECT idAlumno
FROM notas
WHERE nota=11))

-- [09] Alumnos que tienen notas desaprobadas y cuántas notas


desaprobadas tiene

SELECT nombre, COUNT(nota) AS 'Núm. notas Desaprobadas'


FROM alumnos INNER JOIN notas
ON alumnos.idAlumno=notas.idAlumno
WHERE notas.nota<11
GROUP By nombre
166
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

ORDER BY nombre

167
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Finalmente, podemos exportar el todo el script de la base de datos (se deberá


estar en la base de datos alumnos):

Este sería el script exportado:

# DBTools DBMYSQL - MySQL Database Dump


#
# USEGO
CREATE DATABASE `alumnos`;
# GO
USE `alumnos`;
# GO
SET FOREIGN_KEY_CHECKS=0;

# GO
# Dumping Table Structure for alumnos

#
CREATE TABLE `alumnos` (
`idAlumno` int(11) NOT NULL auto_increment,
`nombre` varchar(50) default NULL,
PRIMARY KEY (`idAlumno`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
# GO
#

# Dumping Data for alumnos


#
BEGIN;
# GO
INSERT INTO `alumnos` (idAlumno, nombre) VALUES (1, 'Juan');
# GO
INSERT INTO `alumnos` (idAlumno, nombre) VALUES (2, 'Ana');
# GO
INSERT INTO `alumnos` (idAlumno, nombre) VALUES (3, 'Luis');
# GO
INSERT INTO `alumnos` (idAlumno, nombre) VALUES (4, 'Jorge');
# GO
INSERT INTO `alumnos` (idAlumno, nombre) VALUES (5, 'Carmen');
168
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

# GO
COMMIT;
# GO
# Dumping Table Structure for notas

#
CREATE TABLE `notas` (
`idAlumno` int(11) NOT NULL,
`nota` smallint(6) NOT NULL,
KEY `IXFK_notas` (`idAlumno`),
CONSTRAINT `FK_notas_1` FOREIGN KEY (`idAlumno`) REFERENCES `alumnos`
(`idAlumno`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
# GO
#

# Dumping Data for notas


#
BEGIN;
# GO
INSERT INTO `notas` (idAlumno, nota) VALUES (1, 12);
# GO
INSERT INTO `notas` (idAlumno, nota) VALUES (1, 13);
# GO
INSERT INTO `notas` (idAlumno, nota) VALUES (1, 11);
# GO
INSERT INTO `notas` (idAlumno, nota) VALUES (2, 11);
# GO
INSERT INTO `notas` (idAlumno, nota) VALUES (2, 15);
# GO
INSERT INTO `notas` (idAlumno, nota) VALUES (2, 12);
# GO
INSERT INTO `notas` (idAlumno, nota) VALUES (3, 6);
# GO
INSERT INTO `notas` (idAlumno, nota) VALUES (3, 12);
# GO
INSERT INTO `notas` (idAlumno, nota) VALUES (4, 11);
# GO
INSERT INTO `notas` (idAlumno, nota) VALUES (4, 10);
# GO
INSERT INTO `notas` (idAlumno, nota) VALUES (5, 11);
# GO
COMMIT;
# GO
SET FOREIGN_KEY_CHECKS=1

# GO

Se podrá eliminar la base de datos alumnos y volver a crear todo, o crear la


base de datos alumnos en otra computadora, cargando el escrip guardado en el
disco, mediante la opción Reload Dump, para eso debe tener seleccionado el
nodo Databases:

169
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

170
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Configurar JCreator para trabajar con MySQL


Para que una aplicación en Java pueda comunicarse con una base de datos de
MySQL, necesita de un driver, en este caso es mysql-connector-java-3.1.11-
bin.jar, que se puede descargar de esta dirección:
http://dev.mysql.com/downloads/connector/j/3.1.html. En el CD que acompaña a
este libro lo tiene disponible.

Se recomienda ponerlo en esta ruta, en su disco: Java\jdk1.5.0_05\jre\lib\ext

Luego configurar el JCreator para que pueda hacer uso de él en la compilación


de los archivos Java:

171
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Entonces en el diálogo Options, en él seleccionar JDK Profiles / JDK version


1.50_05 y clic en el botón Edit:

En el diálogo JDK Profile clic en el botón Add y escoja Add Archive, busque el
driver en la ruta indicada anteriormente, finalmente dicho driver se parte del la
lista de Classes:

172
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Simple aplicación de conexión (ConectaMySQL)


Esta es una simple aplicación que prueba la conexión al gestor MySQL, y tendrá
la siguiente presentación cuando se de clic al botón Probar conexión:

El código para esta aplicación está en la clase MiPanel que se empotra en un


Formulario (JFrame), y es el siguiente:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.sql.*;

public class MiPanel extends JPanel implements ActionListener {

JButton b= new JButton("Probar conexión");


JTextArea t= new JTextArea();

public MiPanel() {
setLayout(new BorderLayout());

b.addActionListener(this);
add(b, BorderLayout.NORTH);
add(new JScrollPane(t), BorderLayout.CENTER);
}

public void actionPerformed(ActionEvent e) {


try {
Class.forName("com.mysql.jdbc.Driver").newInstance()
;
Connection cn= DriverManager.getConnection(
"jdbc:mysql://localhost/test",
"root", "admin");

DatabaseMetaData meta=cn.getMetaData();
t.setText("Conexión exitosa\n");
t.append("\nDatabase:\t" +
meta.getDatabaseProductName());
t.append("\nversion:\t" +
meta.getDatabaseProductVersion());

cn.close();

173
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

} catch(SQLException ex) {
t.setText( "SQLException: " + ex.getMessage() +
"\n" + "SQLState: " + ex.getSQLState() +
"\n" + "VendorError: " + ex.getErrorCode());

} catch(Exception ex) {
System.out.println("Exception: " + ex.getMessage() +
"\n\t" + ex.getLocalizedMessage());
}
}
}

En el CD, que acompaña a este libro, tiene la aplicación completa.

174
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Aplicación dosTablasMySQL
Un simple programa demostrativo que muestra como trabajar con 2 tablas
relacionadas en MySQL. En este caso se desarrolla una aplicación para la base
datos alumnos que fue creada con DBManager en este capítulo.

La aplicación tendrá la siguiente presentación: una consulta sobre los alumnos y


su promedio, así como dos ventanas adicionales para añadir nuevos alumnos y
notas para estos alumnos:

MiPanel.java es la clase que muestra la consulta y su código es el siguiente:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import balta.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 nombre as Alumno, ROUND(AVG(nota),2) as Promedio " +
"from alumnos left join notas " +
"On alumnos.idAlumno=Notas.idAlumno " +
"Group By nombre";

JDBTable jt= new JDBTable(sql);

175
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

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);
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);
}
}

Fíjese, que para la consulta se ha usado el componente JDBTable, visto en


anterior capítulo y ahora adaptado para MySQL.

Asimismo, PanInsAlumno.java contiene el código para añadir nuevos alumnos,


y es el siguiente:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import balta.db.*;
import balta.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"));

176
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

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(nombre) Values('" +
n + "')");
if(m!=null)
JOptionPane.showMessageDialog(null,
"Error:" + m);
}

// cierra el formulario
((Formulario2) getTopLevelAncestor()).dispose();
}
}

El ingreso de las notas se hace en la clase PanInsNota.java, que tiene el


siguiente código:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;

import balta.db.*;
import balta.ventanas.*;

public class PanInsNota extends JPanel implements ActionListener {

JDBComboBox alumno= new JDBComboBox(


"Select nombre 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);

177
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

acepta.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {


String a= (String) alumno.getSelectedItem();
String n= (String) nota.getSelectedItem();
String i= null;

// obteniendo idAlumno
Vector id= MiSQL.consulta(
"Select idAlumno From alumnos Where nombre 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();
}
}

En el CD, que acompaña a este libro, tiene la aplicación completa.

178
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Aplicación dosTablasPosgreSQL
Si desea hacer lo mismo con el gestor de base de datos PostgreSQL, recuerde
que tiene que tener la base datos alumnos en él, entonces tendrá que crear un
DSN (Data Source Name), como lo hizo el capítulo con SQL Server y Access, el
DSN deberá llamarse dsnPostgreSQL, ver el programa que está en el CD
(dosTablasPosgreSQL)

Los datos en las cajas de texto son:


Driver:
sun.jdbc.odbc.JdbcOdbcDriver

URL:
jdbc:odbc:dsnX

User:
postgres

Pasword:
admin

SQL:
Select nombre as Alumno, avg(nota) as Promedio from alumnos inner join notas
On alumnos.idAlumno=Notas.idAlumno Group By nombre

179
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

180
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

También este mismo programa funciona con MySQL si cambia el contenido de


las cajas de texto con lo siguiente:
Driver:
com.mysql.jdbc.Driver

URL:
jdbc:mysql://localhost/alumnos

User:
root

Pasword:
admin

SQL:
Select nombre as Alumno, avg(nota) as Promedio from alumnos inner join notas
On alumnos.idAlumno=Notas.idAlumno Group By nombre

El URL también puede ser cambiando en el caso de MySQL por lo siguiente:


URL:
jdbc:mysql://localhost/alumnos?user=root&password=admin

MiPanel.java contiene el código que muestra la aplicación y es el siguiente:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.sql.*;
import java.util.*;

class MiPanel extends JPanel implements ActionListener {

JTextField driver=new JTextField("sun.jdbc.odbc.JdbcOdbcDriver");


JTextField url= new JTextField("jdbc:odbc:dsnPostgreSQL");
JTextField usu= new JTextField("postgres");
JTextField pas= new JTextField("admin");
JTextField sql= new JTextField(
"Select nombre as Alumno, avg(nota) as Promedio " +
"from alumnos inner join notas " +
"On alumnos.idAlumno=Notas.idAlumno " +
"Group By nombre");

JButton ejecutar= new JButton("Ejecutar sentencia SQL");


JTextArea resultado= new JTextArea();

public MiPanel() {
setLayout(new GridLayout(2,1));

181
CAPÍTULO 16: MYSQL, POSGRESQL Y DBMANAGER

Panel p = new Panel();


p.setLayout(new GridLayout(11,1,1,1));

p.add(new Label("Driver:")); p.add(driver);


p.add(new Label("URL:")); p.add(url);
p.add(new Label("Usuario:")); p.add(usu);
p.add(new Label("Password:"));p.add(pas);
p.add(new Label("SQL:")); p.add(sql);
p.add(ejecutar);
ejecutar.addActionListener(this);

add(p);
add(new JScrollPane(resultado));
}

public void actionPerformed(ActionEvent e) {

try {
Class.forName(driver.getText());

Connection cn= DriverManager.getConnection(


url.getText(),usu.getText(),
pas.getText());

Statement st= cn.createStatement();

boolean hayData= st.execute(sql.getText());


if(hayData) muestraResultado(st.getResultSet());
else resultado.setText("Ok: " + sql.getText());

cn.close();

} catch(SQLException ex) {
while(ex!=null) {
resultado.append("Error de SQL: " +
ex.getMessage() + "\n");
ex= ex.getNextException();
}
} catch(Exception ex) {
resultado.setText("Error: " + ex.toString());
}
}

public void muestraResultado(ResultSet r) throws Exception {


resultado.setText("");

while(r.next()){ // hasta fin de archivo


for(int i=1; i<=r.getMetaData().getColumnCount(); ++i)
resultado.append(r.getString(i) + "\t");

resultado.append("\n");
}
}
}

182

S-ar putea să vă placă și