Formulario de acceso con Java y MySQL21 comentarios Publicado por lovelessisma en agosto 24, 2010
Hola a todos, lo que vamos a hacer ahora es un formulario de login (¿si saben lo que es “login”, no?) desarrollado totalmente en Java, y para validar el acceso haremos uso de una base de datos MySql.
Para empezar, contarte que para poder realizar este ejemplo necesitas lo siguiente:
1. Una plataforma de desarrollo en Java: sea Eclipse, sea Netbeans, pero por favor para este ejemplo usa Eclipse.
2. Gestor de base de datos MySql: br />
Con el nombre: EjemploLogin (en realidad puede ser el nombre que ustedes quieran), luego hacemos click en “Finish” (por ahora no haremos click en el botón “Next >” porque por el momento no nos interesa).
Ahora bien, para poder realizar un buen trabajo necesitamos agregar un archivo .jar necesario para poder conectarnos al gesto MySql que tengamos instalado. En este caso hago uso del mysql-connector-java, el cual lo puedes descargar desde aquí.
Para agregar dicho conector primero haremos anti-click en el directorio de nuestro proyecto, y seleccionamos la opción “Build Path” y luego “Configure Build Path…”, de esta forma:
Se nos abrirá el siguiente cuadro de diálogo:
Seleccionamos la pestaña “Libraries” (por si no está seleccionada), y haremos click en el botón “Add External JARs…”, y luego exploramos hasta encontrar la ubicación del conector que acabamos de descargar, y le hacemos doble-click al archivo .jar.
De esta manera se añaden archivos .jar al proyecto. La finalidad de esto es obvia: sin este archivo no podríamos conectar a MySql, en otras palabras, lo que acabamos de agregar es un driver de conexión.Muy bien, empezaremos luego a crear los paquetes necesarios para una mejor organización de nuestro código, separando de esta manera las clases de conexión y manejo de datos con las de interfaz gráfica de usuario, simplemente haciendo anti-click en el directorio “src” del proyecto, seleccionamos “New” y luego hacemos click en “Package”.
Así debe quedar.
Llegados hasta ahí, iremos a la consola o interfaz gráfica que tengamos para crear nuestra base de datos en MySql. El código es el siguiente:
Código:
ver fuente
imprimir ?
1 CREATE DATABASE bd_samplelogin;
2 USE bd_samplelogin;
3 CREATE TABLE `tm_usuario` (
4 `tm_idusuario` int (11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
5 `tm_login` varchar (50),
6 `tm_password` varchar (38)
7 );
A la tabla “tm_usuario” le añadirás los usuarios y las claves que te apetezcan.Ahora bien, volviendo a Eclipse, agregamos al paquete isma.db una clase para conectarnos a la base de datos: Código:
ver fuente
imprimir ?
01
package isma.db;
02
03
import java.sql.Connection;
04
import java.sql.DriverManager;
05
import java.sql.SQLException;
06
public class DbConnection {
07
static String bd = "bd_samplelogin";
0 static String login = "root";
8
09
static String password = "";
10
static String url = "jdbc:mysql://localhost/" + bd;
11
Connection conn = null;
12
public DbConnection() {
13
try {
14
Class.forName("com.mysql.jdbc.Driver");
15
conn = DriverManager.getConnection(url, login, password);
16
}
17
catch(SQLException e){
18
System.out.println(e);
19
}
20
catch(ClassNotFoundException e){
21
System.out.println(e);
22
}
23
}
24
public Connection getConnection(){
25
return conn;
26
}
27
public void desconectar(){
28
conn = null;
29
}
3 }
0
Y agregamos otra para interactuar con la tabla “tm_usuario”:
Código:
01
package isma.db;
02
import java.sql.*;
03
04
public class DbUsuario {
05
DbConnection cn;
06
public DbUsuario() {
07
cn = new DbConnection();
08
}
09
public Object[][] UsuarioAcceder(String login, String password){
10
int registros = 0;
11
try {
12
PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT count(1) as cont" +
13
" FROM tm_usuario");
14
ResultSet res = pstm.executeQuery();
15
res.next();
16
registros = res.getInt("cont");
17
res.close();
18
}
19
catch(SQLException e){
20
System.out.println(e);
2 }
1
22
Object [][] data = new Object[registros][3];
23
if (login.length() != 0 && password.length() != 0){
24
int usu_id;
25
String usu_login = "";
26
String usu_password = "";
27
try {
28
String strsql = "";
29
strsql = "SELECT * FROM tm_usuario WHERE tm_login = '" + login + "' AND tm_password = '" + password + "'";
30
PreparedStatement pstm = cn.getConnection().prepareStatement(strsql);
31
ResultSet res = pstm.executeQuery();
32
int i = 0;
33
while(res.next()){
34
usu_id = res.getInt("tm_idusuario");
35
usu_login = res.getString("tm_login");
36
usu_password = res.getString("tm_password");
37
data[i][0] = usu_id;
38
data[i][1] = usu_login;
39
data[i][2] = usu_password;
40
i++;
41
}
42
res.close();
4 }
3
44
catch(SQLException e){
45
System.out.println(e);
46
}
47
}
48
return data;
49
}
50
}
La clase “DbUsuario” contiene (como podrán haber visto) una función llamada “UsuarioAcceder”, la cual recibirá dos parámetros: el usuario y la clave de acceso. Si el usuario y la clave no se encuentran al momento de realizarse la consulta, o los datos ingresados son incorrectos, o simplemente no existen en la base, por lo tanto al objeto de array bidimensional “data” no se le asignará valores, y si se les asignará cuando los datos sean correctos.No hay mucho que comentar sobre el anterior código, salvo indicar que la consulta anterior a la del acceso sirve para definir la cantidad de ítems que contendrá inicialmente la variable “data”, ya que en Java los arrays de objetos deben ser inicializados antes de ser usados.
Definamos ahora la estructura del formulario principal (es decir, hacia donde queremos acceder). Para esto agregamos una clase en el paquete isma.gui. El formulario va a tener como aditivo a este ejemplo una barra de menú:
Código:
01
package isma.gui;
02
03
import java.awt.event.*;
04
import javax.swing.*;
05
06
public class frmMain extends JFrame {
07
private static final long serialVersionUID = 1L;
08
private JMenuBar barramenu;
09
public frmMain()
10
{
11
super("SISTEMA EJEMPLO LOGIN");
12
}
13
14
public void mostrarForm(boolean mostrar){
15
if (mostrar == true){
16
barramenu = new JMenuBar();
17
JMenu menuArchivo = new JMenu("Configuración y Mantenimiento");
18
menuArchivo.setMnemonic('C');
19
20
JMenuItem itemAcerca = new JMenuItem("Acerca de...");
21
itemAcerca.setMnemonic('A');
22
menuArchivo.add(itemAcerca);
23
itemAcerca.addActionListener(
24
new ActionListener() {
25
public void actionPerformed(ActionEvent evento)
26
{
27
JOptionPane.showMessageDialog(frmMain.this,
28
"Ejemplo Login",
29
"Acerca de", JOptionPane.INFORMATION_MESSAGE);
30
}
31
}
32
);
33
JMenuItem itemSalir = new JMenuItem("Salir");
34
itemSalir.setMnemonic('S');
35
menuArchivo.add(itemSalir);
36
itemSalir.addActionListener(
37
new ActionListener(){
38
public void actionPerformed(ActionEvent evento)
39
{
40
System.exit(0);
41
}
42
}
43
);
44
barramenu.add(menuArchivo);
45
setJMenuBar(barramenu);
46
setSize(1022, 700);
47
setLocationRelativeTo(this.getParent());
48
setVisible(mostrar);
49
setDefaultCloseOperation(EXIT_ON_CLOSE);
50
}
51
}
52
}
La función “mostrarForm” nos servirá para controlar cuando queremos que el formulario principal aparezca. En este caso es preciso que aparezca justo después de comprobar que los datos ingresados en el formulario de login sean correctos. Ahora la estrella de este artículo:
Código:
001
package isma.gui;
002
003
import java.awt.*;
004
import java.awt.event.*;
005
import javax.swing.*;
006
007
import isma.db.*;
008
009
public class frmLogin extends JFrame {
010
private static final long serialVersionUID = 1L;
011
private JTextField txtusuario;
012
private JPasswordField txtpassword;
013
private JButton btnAceptar, btnCancelar;
014
private JLabel lblusuario, lblpassword;
015
private Container contenedor;
016
private GridLayout cuadricula1;
017
public frmLogin()
018
{
019
super("Acceso al Sistema");
020
cuadricula1 = new GridLayout(3, 3, 10, 10);
021
022
lblusuario = new JLabel("Usuario:");
023
lblpassword = new JLabel("Clave:");
024
025
txtusuario = new JTextField(10);
026
txtpassword = new JPasswordField(10);
027
028
btnAceptar = new JButton("Aceptar");
029
btnAceptar.setMnemonic('A');
030
ImageIcon imgAceptar = new ImageIcon("img/user_go.png");
031
btnAceptar.setIcon(imgAceptar);
032
033
btnCancelar = new JButton("Cancelar");
034
btnCancelar.setMnemonic('C');
035
ImageIcon imgCancelar = new ImageIcon("img/sign_cancel.gif");
036
btnCancelar.setIcon(imgCancelar);
037
038
contenedor = getContentPane();
039
contenedor.setLayout(cuadricula1);
040
contenedor.add(lblusuario);
041
contenedor.add(txtusuario);
042
contenedor.add(lblpassword);
043
contenedor.add(txtpassword);
044
contenedor.add(btnAceptar);
045
contenedor.add(btnCancelar);
046
047
btnAceptar.addActionListener(
048
new ActionListener()
049
{
050
@SuppressWarnings("deprecation")
051
public void actionPerformed(ActionEvent evento)
052
{
053
DbUsuario user = new DbUsuario();
054
frmMain principal = new frmMain();
055
056
String usuario;
057
String clave;
058
059
usuario = txtusuario.getText();
060
clave = txtpassword.getText();
061
062
try {
063
Object[][] itemUsuario = user.UsuarioAcceder(usuario, clave);
064
String x_iduser = itemUsuario[0][0].toString();
065
String x_user = itemUsuario[0][1].toString();
066
String x_pass = itemUsuario[0][2].toString();
067 if ((x_user != "") && (x_pass != ""))
068 {
069 JOptionPane.showMessageDialog( frmLogin.this,
070 "Bienvenido al sistema usuario: " + x_user + ", con id: " + x_iduser,
071 "Acerca de", JOptionPane.INFORMATION_MESSAGE );
072 principal.mostrarForm(true);
073 principal.setLocationRelativeTo(principal.getParent());
074 dispose();
075 }
076 }
077 catch(Exception e){
078 JOptionPane.showMessageDialog( frmLogin.this,
079 "Usuario o contraseña incorrecto",
080 "Acerca de", JOptionPane.ERROR_MESSAGE );
081 }
082 }
083 }
084 );
085
086 btnCancelar.addActionListener(
087 new ActionListener() {
088 public void actionPerformed( ActionEvent evento )
089 {
090 System.exit(0);
091 }
092 }
093 );
094
095 setDefaultCloseOperation(EXIT_ON_CLOSE);
096 setResizable(false);
097 setSize(300, 150);
098 setVisible(true);
099 setLocationRelativeTo(this.getParent());
100 }
101 }
Lo interesante de este formulario es lo siguiente: 1. Importación del paquete “isma.db”: import isma.db.*; 2. Los botones tienen imágenes vistosas como iconos. 3. Las variables de usuario y contraseña que recogen los datos de la función “UsuarioAcceder” serán asignadas
siempre y cuando se compruebe que la autenticación sea correcta. Y para terminar, una clase que ejecute todo en el terminal principal:
Código:
01
package isma.gui;
02
import javax.swing.*;
03
04
public class EjemploLogin {
05
public static void main( String args[] )
06
{
07
JFrame.setDefaultLookAndFeelDecorated(true);
08
try {
09
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
10
}
11
catch (Exception e){
12
System.out.println(e);
13
}
14
frmLogin aplicacion = new frmLogin();
15
aplicacion.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
16
}
17
}
Fíjense en la siguiente línea:UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); Esto define el tema visual de la aplicación, es decir, tu aplicación en Java pasa de esto:
A esto:
Sin punto de comparación.Si quieres puedes borrarlo (ojo: todo el try), pero sinceramente te habrás dado cuenta que queda estupendo.
Ahora sólo nos queda correr nuestra aplicación, para eso tecleamos Ctrl + F11:
Y eso ha sido todo damas y caballeros, muy pronto más ejemplos con Java, y muchas sorpresas.
Nota: Los iconos de los botones del formulario "frmLogin" se encuentran en el archivo descargable de la parte inferior de estas líneas.
Top Related