Вы находитесь на странице: 1из 12

Formulario de acceso con Java y MySQL

Formulario de login 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 botn 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 opcin
Build Path y luego Configure Build Path, de esta forma:

Se nos abrir el siguiente cuadro de dilogo:

Seleccionamos la pestaa Libraries (por si no est seleccionada), y haremos click en el botn Add External
JARs, y luego exploramos hasta encontrar la ubicacin del conector que acabamos de descargar, y le hacemos
doble-click al archivo .jar.

De esta manera se aaden archivos .jar al proyecto. La finalidad de esto es obvia: sin este archivo no podramos
conectar a MySql, en otras palabras, lo que acabamos de agregar es un driver de conexin.
Muy bien, empezaremos luego a crear los paquetes necesarios para una mejor organizacin de nuestro cdigo,
separando de esta manera las clases de conexin y manejo de datos con las de interfaz grfica 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 grfica que tengamos para crear nuestra base de datos en MySql. El
cdigo es el siguiente:
Cdigo:

CREATE DATABASE bd_samplelogin;

USE bd_samplelogin;

CREATE TABLE `tm_usuario` (

`tm_idusuario` int (11) PRIMARY KEY NOT NULL AUTO_INCREMENT,

`tm_login` varchar (50),

`tm_password` varchar (38)

);

A la tabla tm_usuario le aadirs 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:
Cdigo:
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";

08

static String login = "root";

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){
System.out.println(e);

21
}

22
23

24

public Connection getConnection(){


return conn;

25
26

27

public void desconectar(){


conn = null;

28
}

29
}

30

Y agregamos otra para interactuar con la tabla tm_usuario:


Cdigo:
0
1

package isma.db;

0
2

import java.sql.*;

0
3
0
4

public class DbUsuario {

0
5

DbConnection cn;

0
6

public DbUsuario() {
cn = new DbConnection();

0
7
0
8

0
9

public Object[][] UsuarioAcceder(String login, String password){

1
0

int registros = 0;

1
1

try {

PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT count(1) as cont" +

2
1
3

" FROM tm_usuario");

1
4

ResultSet res = pstm.executeQuery();

1
5

res.next();

1
6

registros = res.getInt("cont");

1
7

res.close();

1
8

1
9

catch(SQLException e){

2
0

System.out.println(e);

2
1

2
2

Object [][] data = new Object[registros][3];

2
3

if (login.length() != 0 && password.length() != 0){

2
4

int usu_id;

2
5

String usu_login = "";

2
6

String usu_password = "";

2
7

try {

2
8
2
9

String strsql = "";


strsql = "SELECT * FROM tm_usuario WHERE tm_login = '" + login + "' AND tm_password = '" +
password + "'";

3
0

PreparedStatement pstm = cn.getConnection().prepareStatement(strsql);

3
1

ResultSet res = pstm.executeQuery();

3
2

int i = 0;

3
3

while(res.next()){

usu_id = res.getInt("tm_idusuario");

4
3
5

usu_login = res.getString("tm_login");

3
6

usu_password = res.getString("tm_password");

3
7

data[i][0] = usu_id;

3
8

data[i][1] = usu_login;

3
9

data[i][2] = usu_password;

4
0

i++;

4
1

4
2

res.close();

4
3

4
4

catch(SQLException e){

4
5

System.out.println(e);
}

4
6
4
7

4
8

return data;
}

4
9
5
0

La clase DbUsuario contiene (como podrn haber visto) una funcin llamada UsuarioAcceder, la cual recibir
dos parmetros: 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 cdigo, 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:
Cdigo:
01
02

package isma.gui;

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

{
super("SISTEMA EJEMPLO LOGIN");

11
12

13
14
15

public void mostrarForm(boolean mostrar){


if (mostrar == true){

16

barramenu = new JMenuBar();

17

JMenu menuArchivo = new JMenu("Configuracin 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(
new ActionListener() {

24
25

public void actionPerformed(ActionEvent evento)

26

{
JOptionPane.showMessageDialog(frmMain.this,

27
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(
new ActionListener(){

37
38

public void actionPerformed(ActionEvent evento)

39

{
System.exit(0);

40
}

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 funcin mostrarForm nos servir para controlar cuando queremos que el formulario principal aparezca. En este
caso es preciso que aparezca justo despus de comprobar que los datos ingresados en el formulario de login sean
correctos.
Ahora la estrella de este artculo:
Cdigo:
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

JOptionPane.showMessageDialog( frmLogin.this,

069
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){
JOptionPane.showMessageDialog( frmLogin.this,

078
079

"Usuario o contrasea incorrecto",

080

"Acerca de", JOptionPane.ERROR_MESSAGE );


}

081
}

082
}

083
);

084
085

btnCancelar.addActionListener(

086

new ActionListener() {

087
088

public void actionPerformed( ActionEvent evento )

089

{
System.exit(0);

090
}

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.
Importacin del paquete isma.db: import isma.db.*;
2.
Los botones tienen imgenes vistosas como iconos.
3.
Las variables de usuario y contrasea que recogen los datos de la funcin UsuarioAcceder sern asignadas
siempre y cuando se compruebe que la autenticacin sea correcta.
Y para terminar, una clase que ejecute todo en el terminal principal:
Cdigo:
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
}
Fjense en la siguiente lnea:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
Esto define el tema visual de la aplicacin, es decir, tu aplicacin en Java pasa de esto:

A esto:

Sin punto de comparacin.


Si quieres puedes borrarlo (ojo: todo el try), pero sinceramente te habrs dado cuenta que queda estupendo.
Ahora slo nos queda correr nuestra aplicacin, para eso tecleamos Ctrl + F11:

Y eso ha sido todo damas y caballeros, muy pronto ms 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 lneas.

Вам также может понравиться