Sie sind auf Seite 1von 56

Ejemplo bsico de MySQL con Java

Una vez instalado MySQL, descargado el driver para java de MySQL y con una base de
datos y una tabla creada en MySQL, vamos a hacer un pequeo programa en java que
nos permita conectarnos a la base de datos MySQL y consultar la tabla que hemos creado.

Instalar el Driver

En nuestro programa java, todos los import que necesitamos para manejar la base de
datos estn en java.sql.*. Puesto que casi todas los mtodos relativos a base de datos
pueden lanzar la excepcin SQLException, meteremos todo nuestro programa en un try-
catch.

Adems, necesitamos la clase org.gjt.mm.mysql.Driver que viene con el driver de MySQL.


Por ello, en nuestro CLASSPATH o incluido en nuestro proyecto con nuestro IDE favorito,
debemos incluir el jar que contiene el driver MySQL (mysql-connector-java-3.1.7-bin.jar)
o la versin ms moderna y compatible con la versin de nuestro servidor de MySQL.

Lo primero que tenemos que hacer es asegurarnos que el Driver se inicializa y se registra,
para ello

try
{
Class.forName("com.mysql.jdbc.Driver");
}catch(Exceptione)
{
e.printStackTrace();
}

Establecer la conexin con la base de datos

Debemos tener el servidor de MySQL arrancado. Si hemos instalado y dejado esa opcin
como estaba, cada vez que encendamos el ordenador, se arrancar el servidor
de MySQL, por lo que no tenemos que preocuparnos por ello.

El servidor de MySQL abre por defecto el puerto 3306 para aceptar conexiones de
posibles clientes, de programas que quieran conectarse y acceder a la base de datos.
Nuestro programa java, si quiere consultar la tabla de base de datos que hemos creado,
deber conectarse a este servidor.

Para establecer la conexion, la clase DriverManager tiene mtodos getConnection().


Usaremos uno de ellos

//Establecemoslaconexinconlabasededatos.
Connectionconexion=DriverManager.getConnection
("jdbc:mysql://localhost/prueba","root","la_clave");

El primer parmetro del mtodo getConnection() es un String que contiene la url de la


base de datos:

jdb:mysql porque estamos utilizando un driver jdbc para MySQL, que es el que
nos hemos bajado.
localhost porque el servidor de base de datos, en mi caso, est en el mismo
ordenador en el que voy a correr el prorama java. Aqu puede ponerse una IP o un
nombre de mquina que est en la red.

prueba es el nombre de la base de datos que he creado dentro de mysql. Se debe


poner la base de datos dentro del servidor de MySQL a la que se quiere uno
conectar. Es el nombre que pusimos cuando desde SQL hicimos create database
prueba;

Los otros dos parmetros son dos String. Corresponden al nombre de usuario y password
para acceder a la base de datos. Al instalar MySQL se crea el usuario root y se pide la
password para l. Como no hemos creado otros usuarios, usaremos este mismo.

Si todo va bien, en conexion tendremos nuestra conexin a la base de datos.

Esta conexin es en realidad un socket entre java y la base de datos, aunque para
nosotros es transparente. Lo que s es importante, es saber que si varios hilos comparten
esta conexin, deben usarla sincronizadamente. Si no se hace as, los mensajes que van
por el socket se pueden entremezclar y los hilos pueden leer cachos de mensaje
destinados al otro hilo. Otra opcin es que cada hilo cree su propia conexin. Finalmente,
la mejor opcin de todas si nuestra aplicacin va a tener varios hilos intentando acceder a
la base de datos, es usar un Pool de conexiones.

Realizar una consulta

Para realizar cualquier accin sobre la base de datos (consulta, insertar nuevos registros,
modificar los existentes o borrar), necesitamos una clase Statement. Para obtenerla, se le
pide dicha clase a la conexin. La forma de hacerlo, para una consulta, es la siguiente:

//Preparamoslaconsulta
Statements=conexion.createStatement();
ResultSetrs=s.executeQuery("select*frompersona");

La parte de createStatement() no tiene ning secreto, salvo que puede lanzar una
excepcin que hay que capturar.

El Statement obtenido tiene un mtodo executeQuery(). Este mtodo sirve para realizar
una consulta a base de datos.

El parmetro que se pasa en un String en el que est la consulta en lenguaje SQL.


No hace falta terminarlo con punto y coma. En nuestro caso "select * from
persona". siendo persona el nombre que hemos puesto a la tabla en la base de
datos.

El resultado nos lo devuelve el mtodo como un ResultSet. Este ResultSet no es


ms que una clase java similar a una lista en la que est el resultado de la
consulta. Cada elemento de la lista es uno de los registros de la base de datos. En
realidad, ResulSet no contiene todos los datos, sino que los va consiguiendo de la
base de datos segn se van pidiendo. Por ello, el mtodo executeQuery() puede
tardar poco, pero el recorrer los elementos del ResultSet no es tan rpido. De esta
forma se evita que una consulta que d muchos resultados tarde mucho tiempo y
llene la memoria del programa java.

Leer los resultados


El ResultSet contiene dentro los registros leidos de la base de datos. Inicialmente, tal cual
nos lo devuelve el Statement.executeQuery(), tiene internamente un "puntero" apuntando
justo delante del primer registro. El mtodo next() del ResultSet hace que dicho puntero
avance al siguiente registro, en este caso, al primero. Si lo consigue, el
mtodo next() devuelve true. Si no lo consigue (no hay siguiente registro que leer),
devuelve false.

Por tanto, una forma de ir leyendo los registros en meternos en un while.

//Recorremoselresultado,mientrashayaregistrosparaleer,y
escribimoselresultadoenpantalla.
while(rs.next())
{
System.out.println(rs.getInt(1)+""+rs.getString(2)+"
"+rs.getDate(3));
}

Una vez que el "puntero" est apuntando a un registro, los


mtodos getInt(), getString(), getDate(), etc nos van devolviendo los valores de los
campos de dicho registro. Podemos pasar a estos mtodos un ndice (que comienza en 1)
para indicar qu columna de la tabla de base de datos deseamos. Tambin podemos usar
un String con el nombre de la columna (tal cual est en la tabla de base de datos).

Es responsabilidad nuestra saber qu tipo de dato hay en cada columna, aunque si nos
equivocamos y RecordSet es capaz de hacer la conversin, la har por nosotros. Por
ejemplo, en cualquiera de los campos anteriores podemos pedir un getString() y nos
devolveran los nmeros como String y la fecha como String.

Tambin podemos usar getObject(), y el RecordSet nos devolver el Object ms


adecuado para el tipo de campo que pedimos.

Cerrar la conexin

Una vez que terminamos de usar la conexin, se debera cerrar, o bien terminar el
programa, con lo que se cierra automticamente.

//Cerramoslaconexionalabasededatos.
conexion.close();

El ejemplo

En PruebaMySQL.java tienes el ejemplo completo. Debes quitarle la extensin txt y


meterlo en un rbol de directorios que sea chuidiang\ejemplos\base_datos

Vamos ahora a ver ahora cmo meter los resultados de la consulta en un JTable.

Estadsticas y comentarios

Numero de visitas desde el 4 Feb 2007:

Esta pagina este mes: 1092

Total de esta pagina: 503232


Total del sitio: 17564609

Establecer la conexin a la base de datos

Lo primero que vamos a hacer es importar las clases y/o paquetes que
vamos a utilizar (los llamados imports), en este caso solamente ser el
que se muestra a continuacin:

?
1 import java.sql.*;

Posteriormente dentro de la clase declararemos una variable privada de


tipo Connection que ser la que contendr la conexin con la base de
datos:

?
1 public class MySQLBD {
2 private Connection conexion;
3 .
.
4

Para organizar el cdigo crearemos el get y set de conexion adems del


mtodo llamado conectar() el cual se encargar de establecer a la
conexin con la base de datos para que posteriormente podamos realizar
los procedimientos que necesitamos. Dentro del mtodo encerraremos la
mayor parte del cdigo dentro de un try-catch con el fin de capturar las
excepciones que se puedan originar tras la ejecucin del mismo.

?
1
2 public Connection getConexion() {
3 return conexion;
}
4 public void setConexion(Connection conexion) {
5 this.conexion = conexion;
6 }
7 public MySQLBD conectar() {
try {
8 .
9 .
10 .
11 } catch (Exception e) {
12 e.printStackTrace();
}
13
14 return this;
15 }
16
17
18

Como puedes ver, el mtodo devuelve una instancia de la


clase MySQLBD (es decir, la misma que lo contiene), esto con el fin de
poder encadenar los siguientes mtodos que necesitaremos y ahorrarnos
una lnea de cdigo.

Ahora bien, dentro del try-catch lo primero que realizaremos ser cargar
el driver en la memoria y posteriormente crear una cadena con la URL de
conexin a la base de datos como se muestra en el siguiente cdigo:

?
1
2 Class.forName("com.mysql.jdbc.Driver");
3 String BaseDeDatos = "jdbc:mysql://localhost/test?user=usuario&password=123";

En la URL de la conexin debes tomar en cuenta que:

localhost indica el host o la IP del servidor Oracle.

test es la base de datos.

user es el usuario con el que te vas a conectar.

password es la contrasea.

En este momento lo nico que nos falta para crear la conexin es llamar
al mtodo getConnection() del driver de la siguiente manera:

?
1 setConexion(DriverManager.getConnection(BaseDeDatos));

Puedes validar si la conexin se realiz correctamente verificando si la


variable es nula:

?
1
2 if (conexion != null) {
3 System.out.println("Conexion exitosa!");
4 } else {
5 System.out.println("Conexion fallida!");
}
6

El mtodo completo entonces quedara de la siguiente manera:


?
1
2
3 public MySQLBD conectar() {
4 try {
5 Class.forName("com.mysql.jdbc.Driver");
6 String BaseDeDatos = "jdbc:mysql://localhost/test?user=usuario&password=123
setConexion(DriverManager.getConnection(BaseDeDatos));
7 if(getConexion() != null){
8 System.out.println("Conexion Exitosa!");
9 }else{
10 System.out.println("Conexion Fallida!");
11 }
} catch (Exception e) {
12 e.printStackTrace();
13 }
14 return this;
15 }
16

Ejecutar sentencias en la base de datos

Ya que hemos realizado la conexin a la base de datos podemos trabajar


con ella por lo cual crearemos un mtodo a partir del cual ejecutaremos
las sentencias ms comunes que no nos devuelven
resultados como INSERT, UPDATE, DELETE, etc.

Vamos a definir el mtodo para que sea pblico y nos devuelva un valor
booleano, true si se ejecuta la consulta correctamente, false si no. A su
vez recibir una cadena que contendr la consulta SQL a ejecutar.

?
1 public boolean ejecutar(String sql) {
2 .
3 .
4 .
}
5

Posteriormente, igual como lo hicimos en el mtodo anterior, vamos a


encerrar prcticamente todo el comportamiento dentro de try-catch.

?
1
2 public boolean ejecutar(String sql) {
3 try {
.
4 .
5 .
6 } catch (SQLException e) {
7 e.printStackTrace();
return false;
8 }
9 return true;
10 }
11
12

Ahora definimos un objeto tipo Statement que nos ayudar a ejecutar la


consulta de la siguiente manera:

?
1 Statement sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY,
2 ResultSet.CONCUR_READ_ONLY);
3 sentencia.executeUpdate(sql);

Por ltimo cerramos la sentencia para liberar recursos:

?
1 sentencia.close();

En el caso de que se presente una excepcin daremos por hecho que no


se realiz la ejecucin correctamente, por lo tanto, slo en ese caso
retornaremos false.

El mtodo completo luce de la siguiente manera:

?
1 public boolean ejecutar(String sql) {
2 try {
3 Statement sentencia = getConexion().createStatement(ResultSet.TYPE_F
4 ResultSet.CONCUR_READ_ONLY);
sentencia.executeUpdate(sql);
5 sentencia.close();
6 } catch (SQLException e) {
7 e.printStackTrace();
8 return false;
9 } return true;
}
10

Realizar consultas a la base de datos

Lo nico que nos falta es consultar a la base de datos ( SELECT) lo cual


haremos igualmente mediante un mtodo pblico que nos devuelva un
objeto de tipo ResultSet e igualmente recibir una cadena que contendr
una consulta SQL a realizar.

?
1
2 public ResultSet consultar(String sql) {
.
3 .
4 .
5 }
6
Lo primero que vamos a agregar es una declaracin del objeto de
tipo ResultSet y posteriormente encerraremos la ejecucin dentro de
un try-catch para capturar las excepciones que se puedan generar.

?
1
public ResultSet consultar(String sql) {
2 ResultSet resultado = null;
3 try {
4 } catch (SQLException e) {
5 e.printStackTrace();
6 return null;
}
7 return resultado;<
8 }
9

De igual manera nos apoyaremos de un objeto de tipo Statement para


poder realizar la consulta.

?
1 Statement sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY,
2 ResultSet.CONCUR_READ_ONLY);

Obtenemos el mapa de resultados a travs del


mtodo executeQuery() del objeto Statement y posteriormente llamamos
al mtodo commit() de la conexin para asegurarnos que la consulta se
est realizando.

?
1
resultado = sentencia.executeQuery(sql);
2 getConexion().commit();
3

En el caso de que se presente una excepcin daremos por hecho que no


se realiz la consulta correctamente, por lo tanto, slo en ese caso
retornaremos null.

El mtodo completo se ve de la siguiente manera:

?
1 public ResultSet consultar(String sql) {
2 ResultSet resultado;
3 try {
4 Statement sentencia = getConexion().createStatement(ResultSet.TYPE_F
ResultSet.CONCUR_READ_ONLY);
5 resultado = sentencia.executeQuery(sql);
6 } catch (SQLException e) {
7 e.printStackTrace();
8 return null;
9 } return resultado;
}
10
Con esto tenemos completa nuestra clase que se encargar de realizar la
conexin, consulta y ejecucin de sentencias en la base de datos Oracle.

Probar el funcionamiento

Para verificar que todo funciona bien podemos crear una tabla en la base
de datos de nombre TEST con 2 campos, IDENTIFICADOR de
tipo INTEGER y DESCRIPCION de tipo VARCHAR y ejecutar lo siguiente
dentro del mtodo main:

?
1
2 public static void main(String[] args) {
3 MySQLBD baseDatos = new MySQLBD().conectar();
4
5 if (baseDatos.ejecutar("INSERT INTO TEST(IDENTIFICADOR,DESCRIPCION) VALUES
6 System.out.println("Ejecucin correcta!");
7 } else {
System.out.println("Ocurri un problema al ejecutar!");
8 } ResultSet resultados = baseDatos.consultar("SELECT * FROM TEST");
9 try {
10 System.out.println("IDENTIFICADOR DESCRIPCION");
11 System.out.println("--------------------------------");
while (resultados.next()) {
12
System.out.println(""+resultados.getBigDecimal("IDENTIFICADOR"
13 }
14 } catch (Exception e) {
15 e.printStackTrace();
16 }
}
17 }
18
19

Como es de costumbre, el proyecto de NetBeans est disponible para


descargar desde el siguiente enlace:

1- Necesitamos contar con MySQL y Apache Server


El Apache y MySQL server son necesarios para que se pueda dar la
comunicacin de la aplicacin Java con la base de datos. Antes ya he
escrito en este blog sobre XAMPP y he mostrado cmo crear bases de
datos desde PHPmyAdmin. En este tutorial no crearemos las bases de
datos con este mtodo sino que a travs de programacin crearemos
y modificaremos la base de datos en MySQL.

Lo que yo recomiendo en cuando al Apache y MySQL servers es


descargar e instalar XAMPP. Este programa lo podemos conseguir en
su sitio oficial:

Descargar XAMPP

Una vez descargado e instalado, abrimos la aplicacin y nos aparece


la siguiente ventana:

Slo tenemos que dar clic en Start para el MySQL y Apache Servers.
Hemos completado el primer paso de nuestro proceso. Veamos qu
sigue.

2- Descargar el MySQL driver para Java


Esta es la librera que hace posible el uso de MySQL con Java. Posee
los mtodos necesarios para que esto sea posible. La podemos
descargar desde el siguiente enlace:

MySQL Driver JDBC

Dentro encontraremos el archivo mysql-connector-java-5.0.8-


bin.jar que es el que tendremos que agregar a nuestro proyecto en
Netbeans.
Podemos seguir con el siguiente paso.

3- Creamos un proyecto en Netbeans


Creamos un proyecto tipo Java Application llamado MySQL_Test.
Dentro vamos a agregar un JFrame y una clase. El JFrame lo vamos a
llamar Window y la clase se llamar MySQL. Recordamos agregar la
librera que descargamos en el paso anterior.
4- Programamos la clase MySQL
Dentro de la clase MySQL vamos a colocar todos los mtodos
relacionados al manejo de la base de datos y la conexin con el
servidor. Lo primero que haremos ser crear una variable global.
Estas es:

1 private static Connection Conexion;

Ahora creamos un mtodo tipo void llamado MySQLConnection().


Aqu vamos a iniciar una conexin con el servidor MySQL. El cdigo es
el siguiente:

public void MySQLConnection(String user, String pass, String db_name) throws Exception
1
{
2
try {
3
Class.forName("com.mysql.jdbc.Driver");
4
Conexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/" +
5 db_name, user, pass);

6 JOptionPane.showMessageDialog(null, "Se ha iniciado la conexin con el servidor


de forma exitosa");
7
} catch (ClassNotFoundException ex) {
8
Logger.getLogger(MySQL.class.getName()).log(Level.SEVERE, null, ex);
9
} catch (SQLException ex) {
1
0 Logger.getLogger(MySQL.class.getName()).log(Level.SEVERE, null, ex);

1 }
1
}

Como vemos, necesitamos introducir como parmetros el nombre de


usuario, la contrasea y el nombre de la base de datos. Podemos
hacer una prueba en este momento. Si tenemos todo en orden,
creamos una instancia de la clase MySQL en el mtodo de la clase
principal (MySQL_Test) y ejecutamos el mtodo MySQLConnection().
Aqu est el cdigo que se coloca en la clase principal:

1 public static void main(String[] args) {

2 MySQL db = new MySQL();

3 db.MySQLConnection("root", "", "");

4 }

El nombre de usuario por defecto es root. La contrasea y nombre de


la base de datos la dejamos en blanco. Si tenemos todo en orden, el
resultado debe ser el siguiente:

Podemos agregar un mtodo para finalizar la conexin con el


servidor.

1 public void closeConnection() {


try {
2
Conexion.close();
3
JOptionPane.showMessageDialog(null, "Se ha finalizado la conexin con el
4
servidor");
5
} catch (SQLException ex) {
6
Logger.getLogger(MySQL.class.getName()).log(Level.SEVERE, null, ex);
7
}
8
}

Ahora crearemos otro mtodo, esta vez para crear una base de datos.
Lo llamaremos createDB(). El cdigo es el siguiente:

1
public void createDB(String name) {
2
try {
3
String Query = "CREATE DATABASE " + name;
4
Statement st = Conexion.createStatement();
5
st.executeUpdate(Query);
6
closeConnection();
7
MySQLConnection("root", "", name);
8
JOptionPane.showMessageDialog(null, "Se ha creado la base de datos " + name + " de
9 forma exitosa");

1 } catch (SQLException ex) {


0
Logger.getLogger(MySQL.class.getName()).log(Level.SEVERE, null, ex);
1
1 }

1 }
2

Un punto que me gustara resaltar es la variable que he llamado


Query. Esta variable contiene una instruccin que es con lo que se
trabaja en MySQL. Para las bases de datos, el Query consta de los
comantos CREATE TABLE seguido del nombre de la base de datos.
Ntese que para que este mtodo se pueda utilizar es necesario
primero ejecutar MySQLConnection(). Una vez que se ha creado la
Base de Datos, se cierra la conexin y se reinicia, ahora introduciendo
como parmetro la base de datos que hemos creado.
Vamos a crear un mtodo para crear una tabla dentro de la base de
datos. Lo llamaremos createTable().

2 public void createTable(String name) {

3 try {

4 String Query = "CREATE TABLE " + name + ""

5 + "(ID VARCHAR(25),Nombre VARCHAR(50), Apellido VARCHAR(50),"

6 + " Edad VARCHAR(3), Sexo VARCHAR(1))";

8 Statement st = Conexion.createStatement();

9 st.executeUpdate(Query);

1 JOptionPane.showMessageDialog(null, "Se ha creado la tabla " + name + " de forma


0 exitosa");

1 } catch (SQLException ex) {


1
Logger.getLogger(MySQL.class.getName()).log(Level.SEVERE, null, ex);
1
}
2
}
1
3

Tenemos lo que se necesita para construir una Base de Datos y una


Tabla. El Query esta vez luce un poco diferente. Para crear la tabla se
utiliza CREATE TABLE seguido del nombre de la tabla, se abre un
parntesis y se coloca el nombre de las columnas que va a tener y el
tipo de dato de cada columna, separando cada una columna de otra
con una coma (,). Para este ejemplo utilizar VARCHAR, aunque para
la edad bien pude utilizar INT. Entre parntesis se coloca la cantidad
mxima de caracteres que podr almacenar una celda de
determinada columna. La tabla poseer 5 columnas: ID, Nombre,
Apellido, Edad y Sexo.

Ahora hay que crear un mtodo para introducir los registros a la


tabla. Crearemos el mtodo insertData(). El cdigo es el siguiente:
1

2
public void insertData(String table_name, String ID, String name, String lastname, String
3 age, String gender) {

4 try {

5 String Query = "INSERT INTO " + table_name + " VALUES("

6 + "\"" + ID + "\", "

7 + "\"" + name + "\", "

8 + "\"" + lastname + "\", "

9 + "\"" + age + "\", "

1 + "\"" + gender + "\")";


0
Statement st = Conexion.createStatement();
1
1 st.executeUpdate(Query);

1 JOptionPane.showMessageDialog(null, "Datos almacenados de forma exitosa");


2
} catch (SQLException ex) {
1
JOptionPane.showMessageDialog(null, "Error en el almacenamiento de datos");
3
}
1
4 }
1
5

Ahora el Query posee la instruccin INSERT INTO, seguido del


nombre de la tabla en la que se quiere insertar la informacin. Luego
se agrega la palabra VALUES y entre parntesis los valores que se
desean insertar, entre comillas. Digamos que queremos introducir la
informacin de Juan Rodrguez, hombre con 19 aos de edad. Su ID
es 8-835-532. El nombre de la tabla es Registros. El Query quedara
de la siguiente forma:

INSERT INTO Registros VALUES (8-835-532, Juan, Rodrguez,


19, M);

Ahora vamos a crear un mtodo llamado getValues() para hacer las


consultas en la base de datos. Por ahora vamos a imprimir en la
consola.
1

3
public void getValues(String table_name) {
4
try {
5
String Query = "SELECT * FROM " + table_name;
6
Statement st = Conexion.createStatement();
7
java.sql.ResultSet resultSet;
8
resultSet = st.executeQuery(Query);
9

1
while (resultSet.next()) {
0
System.out.println("ID: " + resultSet.getString("ID") + " "
1
1 + "Nombre: " + resultSet.getString("Nombre") + " " +
resultSet.getString("Apellido") + " "
1
2 + "Edad: " + resultSet.getString("Edad") + " "
1 + "Sexo: " + resultSet.getString("Sexo"));
3
}
1
4

1 } catch (SQLException ex) {


5
JOptionPane.showMessageDialog(null, "Error en la adquisicin de datos");
1
6 }

1 }
7

1
8

Ahora el Query est formado por las palabras

SELECT * FROM seguidas del nombre de la tabla. El asterisco indica que se desean consultar
todos los valores de una fila determinada. Para hacer la consulta necesitamos crear
un resultSet. Esta variable funciona como una cabeza lectora que va leyendo fila a fila. Con el
mtodo getString() leemos las columnas que deseamos.

Ahora le vamos a agregar un mtodo para borrar registros. Lo


llamaremos deleteRecord() y le introduciremos como parmetro el
nombre de la tabla y el ID del registro que queremos eliminar.
1
public void deleteRecord(String table_name, String ID) {
2
try {
3
String Query = "DELETE FROM " + table_name + " WHERE ID = \"" + ID + "\"";
4
Statement st = Conexion.createStatement();
5
st.executeUpdate(Query);
6

7
} catch (SQLException ex) {
8
System.out.println(ex.getMessage());
9
JOptionPane.showMessageDialog(null, "Error borrando el registro especificado");
1
0 }

1 }
1

Quizs podramos agregar mtodos para borrar tablas y bases de


datos pero vamos a dejarlo as por ahora. Hemos terminado de
programar la clase MySQL. Aqu la tenemos:

1 package mysql_test;

3 import java.sql.Connection;

4 import java.sql.DriverManager;

5 import java.sql.SQLException;

6 import java.sql.Statement;

7 import java.util.logging.Level;

8 import java.util.logging.Logger;

9 import javax.swing.JOptionPane;

10

11 public class MySQL {

12

13 private static Connection Conexion;


14

15 public void MySQLConnection(String user, String pass, String db_name) {

16 try {

17 Class.forName("com.mysql.jdbc.Driver");

18 Conexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/" +
db_name, user, pass);
19
System.out.println("Se ha iniciado la conexin con el servidor de forma exitosa");
20
} catch (ClassNotFoundException ex) {
21
Logger.getLogger(MySQL.class.getName()).log(Level.SEVERE, null, ex);
22
} catch (SQLException ex) {
23
Logger.getLogger(MySQL.class.getName()).log(Level.SEVERE, null, ex);
24
}
25
}
26

27
public void closeConnection() {
28
try {
29
Conexion.close();
30
System.out.println("Se ha finalizado la conexin con el servidor");
31
} catch (SQLException ex) {
32
Logger.getLogger(MySQL.class.getName()).log(Level.SEVERE, null, ex);
33
}
34
}
35

36
public void createDB(String name) {
37
try {
38
String Query = "CREATE DATABASE " + name;
39
Statement st = Conexion.createStatement();
40
st.executeUpdate(Query);
41
MySQLConnection("root", "", name);
42
JOptionPane.showMessageDialog(null, "Se ha creado la base de datos " + name +
43 " de forma exitosa");

44 } catch (SQLException ex) {


45 Logger.getLogger(MySQL.class.getName()).log(Level.SEVERE, null, ex);
46 }
47 }
48

49 public void createTable(String name) {


50 try {

51 String Query = "CREATE TABLE " + name + ""

52 + "(ID VARCHAR(25),Nombre VARCHAR(50), Apellido VARCHAR(50),"

53 + " Edad VARCHAR(3), Sexo VARCHAR(1))";

54 JOptionPane.showMessageDialog(null, "Se ha creado la base de tabla " + name +


" de forma exitosa");
55
Statement st = Conexion.createStatement();
56
st.executeUpdate(Query);
57
} catch (SQLException ex) {
58
Logger.getLogger(MySQL.class.getName()).log(Level.SEVERE, null, ex);
59
}
60
}
61

62
public void insertData(String table_name, String ID, String name, String lastname,
63 String age, String gender) {

64 try {
65 String Query = "INSERT INTO " + table_name + " VALUES("
66 + "\"" + ID + "\", "
67 + "\"" + name + "\", "
68 + "\"" + lastname + "\", "
69 + "\"" + age + "\", "
70 + "\"" + gender + "\")";
71 Statement st = Conexion.createStatement();
72 st.executeUpdate(Query);
73 JOptionPane.showMessageDialog(null, "Datos almacenados de forma exitosa");
74 } catch (SQLException ex) {
75 JOptionPane.showMessageDialog(null, "Error en el almacenamiento de datos");
76 }
77 }
78

79 public void getValues(String table_name) {


80 try {
81 String Query = "SELECT * FROM " + table_name;
82 Statement st = Conexion.createStatement();
83 java.sql.ResultSet resultSet;
84 resultSet = st.executeQuery(Query);
85
86

87
while (resultSet.next()) {
88
System.out.println("ID: " + resultSet.getString("ID") + " "
89
+ "Nombre: " + resultSet.getString("Nombre") + " " +
90 resultSet.getString("Apellido") + " "

91 + "Edad: " + resultSet.getString("Edad") + " "

92 + "Sexo: " + resultSet.getString("Sexo"));

93 }

94

95 } catch (SQLException ex) {

96 JOptionPane.showMessageDialog(null, "Error en la adquisicin de datos");

97 }

98 }

99

10 public void deleteRecord(String table_name, String ID) {


0
try {
10
String Query = "DELETE FROM " + table_name + " WHERE ID = \"" + ID + "\"";
1
Statement st = Conexion.createStatement();
10
2 st.executeUpdate(Query);
10
3
} catch (SQLException ex) {
10
4 System.out.println(ex.getMessage());

10 JOptionPane.showMessageDialog(null, "Error borrando el registro especificado");


5
}
10
6 }

10
7
}
10
8

Vamos al siguiente paso.

5- Creamos una interfaz grfica


Vamos a la clase Window.java y diseamos una sencilla interfaz de
usuario.
Colocamos los 4 botones con las opciones que deseamos que posea
nuestra aplicacin. Las opciones Registrar Usuario, Obtener
Registros y Borrar Registro se encuentran inactivas ya que no
pueden ser ejecutadas si no se inicia la conexin con el servidor
MySQL.

Vamos a crear una clase con un formulario de registro y una con la


opcin de borrar un registro. He agregado las
clases Window_Register y Window_Delete con las siguientes
interfaces grficas.
Podemos pasar al siguiente paso.

6- Programamos la interfaz grfica


La prioridad de toda aplicacin Java es ejecutar el mtodo main de la
clase principal. Vamos a crear una instancia para que lo primero que
haga nuestro programa sea mostrarnos la ventana principal.

Nuestro mtodo main de la clase MySQL_Test quedara de la


siguiente forma:
1 public static void main(String[] args) {

2 Window w = new Window();

3 w.setVisible(true);

4 }

Ahora cada vez que ejecutamos nuestro programa nos aparece la


ventana principal. Vamos a programar la clase Window.java.

Primero creamos un objeto llamado db como una instancia de la clase


MySQL. En el botn Conectar a base de Datos debemos colocar el
siguiente cdigo:

1 db.MySQLConnection("root", "", "");

2 db.createDB("MySQL_Test");

3 db.createTable("Registros");
Ejecutemos el programa para ver si todo est en orden.

En nuestro PHPMyAdmin (en XAMPP presionamos el botn Admin al


lado de MySQL) nos debe aparecer una nueva base de datos con la
tabla registros en su interior.

Ahora el cdigo que colocamos en el botn debemos cambiarlo, ya


que no podemos crear una base de datos con el mismo nombre 2
veces. Ya tenemos nuestra base de datos con la tabla registros
dentro, as que vamos a cambiar la programacin.
1 db.MySQLConnection("root", "", "MySQL_Test");

2 jButtonConnect.setEnabled(false);

3 jButtonDelete.setEnabled(true);

4 jButtonGet.setEnabled(true);

5 jButtonRegister.setEnabled(true);

Vemos que al iniciar la conexin se des habilita el botn de conectar y


se habilitan los dems botones. A continuacin el cdigo para cada
botn:
Ahora vamos a cada ventana que hemos agregado y programamos
los botones. Primero la ventana de borrar registros.

En el botn de Borrar Registro colocamos:

1 MySQL db = new MySQL();

2 db.MySQLConnection("root", "", "MySQL_Test");

3 db.deleteRecord("Registros", jTextFieldID.getText());

4 db.closeConnection();

5 this.dispose();

Instanciamos la clase MySQL, luego abrimos una conexin, borramos


el registro con el ID que se haya introducido en el TextField y
cerramos la conexin. Por ltimo cerramos la ventana.
Ahora vamos a la ventana de registro de datos. La programacin del
botn Registrar es la siguiente:

1 MySQL db = new MySQL();

2 db.MySQLConnection("root", "", "MySQL_Test");

3 db.insertData("Registros", jTextFieldID.getText(),

4 jTextFieldNombre.getText(),

5 jTextFieldApellido.getText(),

6 jTextFieldEdad.getText(),

7 jComboBoxSexo.getSelectedItem().toString());

8 db.closeConnection();

9 this.dispose();

Nuestro cdigo nos queda as:


Con esto hemos terminado nuestra programacin. Tenemos una
pequea aplicacin que nos permite registrar informacin en una
base de datos, imprimirla y borrar ciertos registros.

7- Probamos nuestra aplicacin


Ya que tenemos nuestro cdigo terminado podemos proceder a
probar lo que hemos hecho. El proyecto completo puede ser
descargado desde Github, en el siguiente enlace:

MySQL_Test

A continuacin un video donde se muestra el funcionamiento de esta


aplicacin.

El proyecto est tal como lo he desarrollado para este tutorial.


Debemos recordar que esto no es una aplicacin, sino una
demostracin. Los mtodos pueden ser mejorados y hay algunas
cosas que se pueden hacer de una mejor forma que la que he
plasmado en este tutorial, pero queda en ustedes desarrollar sus
habilidades en el uso de MySQL a partir de lo que ya les he mostrado
aqu.

Espero sus comentarios. Saludos.


Solo haz el import de la clase dentro del cdigo del JFrame LogUsuarios

si tienes la clase dentro de un paquete entonces lo llamas asi:

import paquete.Clase;

y con eso puedes usar el metodo de validar de tu clase Login

Cmo mostrar un dialogo de mensaje en Java


(JOptionPane)
abril 23, 2013

Hola y buen da a todos mis lectores, hoy veremos de nuevo un tema para
principiantes en lenguaje Java, y el tema (como dice ah arriba) es Cmo mostrar
un dialogo de mensaje en Java para logra tal cosa usaremos la clase JOptionPane.
Aqu abajo hay una imagen que muestra lo que haremos ms adelante,
comencemos
Dentro de la programacin, la comunicacin con el usuario es una de las cosas ms
importantes (y a mi parecer la ms importante, ya que es el fin de cualquier
programa), anteriormente ya habamos hablado de eso en otro de mis artculos,
pero hoy nos centraremos especficamente en cmo mostrar diferentes tipos de
mensajes, ya sea un simple aviso, un mensaje de error, de advertencia, pregunta,
etc.

Mostrando un mensaje simple en la pantalla


Si lo que queremos es mostrar un mensaje de una lnea fcil y rpido, aqu les va la
solucin:
01 import javax.swing.JOptionPane;

02

03 public final class Mensajes {

04

05 /**

06 * Lanza un dialogo de mensaje de una lnea:

07 */

08 public static void lanzarMensaje(){

09 //En la siguiente lnea est la magia (es lo que muestra el


mensaje).

10 JOptionPane.showMessageDialog(null, "Hola mundo!");

11 }

12

13 public static void main(String[] args){

14 lanzarMensaje();

15 }

16

17 }

Y lo que tenemos es:

Sencillo, verdad? Como vieron, esto va dentro de algn mtodo ya sea el main o
cualquier otro, un constructor, lo que sea. Ahora, veamos algo un poco mejor, y
qu es mejor que un mensaje de una lnea? Pues un mensaje de 2 lneas :D (o las
que queramos).

Para mostrar un dialogo de varias lneas, necesitamos un salto de lnea, para esto,
llamaremos a una propiedad del sistema, esto ser tal como dar \n en C++ y en
Java es tambin vlido, pero esta no es la forma ms extensible de hacerlo Por
qu? Pues recordemos que Java es multiplataforma, puede que no en todos los
sistemas operativos tomen esto como un salto de lnea, en algunos es algo
como \n\r o dependiendo, as que para no complicarnos, lo haremos de la siguiente
manera:

Mostrando un mensaje de varias lneas:


01 import javax.swing.JOptionPane;

02
03 public final class Mensajes {

04

05 /**

06 * Lanza un dialogo de mensaje de una lnea:

07 */

08 public static void lanzarMensaje(){

//En la siguiente lnea est la magia (es lo que muestra el


09
mensaje).

10 JOptionPane.showMessageDialog(null, "Hola mundo!");

11 }

12

13 /**

14 * Lanza un dialogo de varias lneas:

15 */

16 public static void lanzarMensajeVariasLneas(){

17 //Propiedad del sistema para salto de lnea:

18 String nl = System.getProperty("line.separator");

19 //Lanzamos el mensaje:

20 JOptionPane.showMessageDialog(null, "Soy un mensaje"

21 + nl + "de varias lneas..."

22 + nl + "Y esto lo viste en el Blog de Baro :D.");

23 }

24

25 public static void main(String[] args){

26 lanzarMensajeVariasLneas();

27 }

28

29 }

Y el resultado es:
Ahora, esos son mensajes sencillos, muy tiles claro, pero JOptionPane (la clase
que estamos usando) tiene an muchos trucos bajo la manga, podemos hacer
muchos tipos de dilogos de manera sencilla, como por ejemplo:

Dialogo de confirmacin (Hace una pregunta de confirmacin como S, No,


Cancelar).

Dialogo de entrada (Solicita alguna entrada al usuario).

Dialogo de mensaje (Le comunica al usuario algo que ha pasado).

Dialogo de opcin (Es la unificacin de los otros tres).

stos dilogos pueden mostrarse tambin en un JInternalFrame, con su respectivo


mtodoshowInternalXXX() pero se no es el tema de hoy, lo veremos luego.

Ahora, hemos utilizado ya el dialogo de mensaje ms simple con el


mtodoshowMessageDialog(Component comp, Object
msj) de JOptionPane mostramos mensajes de una y varias lneas, pero, si quieren
hacer algo un poco ms complejo con estos dilogos aqu les van los otros 2
mtodos de JOptionPane para mostrar dilogos de mensaje:

showMessageDialog(Component comp, Object mensaje, String titulo, int


tipoMensaje)
showMessageDialog(Component comp, Object mensaje, String titulo, int
tipoMensaje, Icon icon)

El primer mtodo, pide el componente padre (Component), en caso de que


llamemos al dialogo desde un JFrame o un JPanel, podemos ponerlo como
argumento, luego nos pide el mensaje (Object), ya hemos visto como se utiliza para
mostrar una lnea o varias, despus pide el ttulo (String) donde ponemos el ttulo
del dialogo a nuestro gusto (por si alguno todava no se daban cuenta para qu
era :P) luego el tipo de mensaje (int), esto es lo interesante, aqu podemos poner
una de las constantes que ofreceJOptionPane para cambiar el icono que aparece a
la izquierda del dialogo, las constantes son:PLAIN_MESSAGE,
INFORMATION_MESSAGE, QUESTION_MESSAGE, ERROR_MESSAGE yWAR
NING_MESSAGE, a continuacin la imagen del icono que vamos a cambiar:

Y ahora un ejemplo de uso en la clase con la que hemos estado trabajando:


01 import javax.swing.JOptionPane;

02

03 public final class Mensajes {

04

05 /**

06 * Lanza un dialogo de mensaje de una lnea:

07 */

08 public static void lanzarMensaje(){

//En la siguiente lnea est la magia (es lo que muestra el


09
mensaje).
10 JOptionPane.showMessageDialog(null, "Hola mundo!");

11 }

12

13 /**

14 * Lanza un dialogo de varias lneas:

15 */

16 public static void lanzarMensajeVariasLneas(){

17 //Propiedad del sistema para salto de lnea:

18 String nl = System.getProperty("line.separator");

19 //Lanzamos el mensaje:

20 JOptionPane.showMessageDialog(null, "Soy un mensaje"

21 + nl + "de varias lneas..."

22 + nl + "Y esto lo viste en el Blog de Baro :D.");

23 }

24

25 /**

26 * Lanza varios dialogos con diferentes tipos de cono.

27 */

28 public static void lanzarTiposDeMensaje(){

29 //Propiedad del sistema para salto de lnea:

30 String nl = System.getProperty("line.separator");

31 //Mensaje (lo usaremos en todos los dialogos):

32 Object msj = "Soy un mensaje"

33 + nl + "de varias lneas..."

34 + nl + "Y esto lo viste en el Blog de Baro :D.";

35

36 /*

37 * Pongo cada argumento en diferente lnea para

38 * que no se haga muy largo y el cdigo est

39 * ms ordenado:

40 */

41 JOptionPane.showMessageDialog(null,

42 msj, //Mensaje
43 "Mensaje Plano", //Ttulo

44 JOptionPane.PLAIN_MESSAGE); //Tipo de mensaje

45

46 JOptionPane.showMessageDialog(null,

47 msj, //Mensaje

48 "Mensaje Informativo", //Ttulo

49 JOptionPane.INFORMATION_MESSAGE); //Tipo de mensaje

50

51 JOptionPane.showMessageDialog(null,

52 msj, //Mensaje

53 "Mensaje de Pregunta", //Ttulo

54 JOptionPane.QUESTION_MESSAGE); //Tipo de mensaje

55

56 JOptionPane.showMessageDialog(null,

57 msj, //Mensaje

58 "Mensaje de Error", //Ttulo

59 JOptionPane.ERROR_MESSAGE); //Tipo de mensaje

60

61 JOptionPane.showMessageDialog(null,

62 msj, //Mensaje

63 "Mensaje de Advertencia", //Ttulo

64 JOptionPane.WARNING_MESSAGE); //Tipo de mensaje

65 }

66

67 public static void main(String[] args){

68 lanzarTiposDeMensaje();

69 }

70

71 }

Al correr este cdigo veremos 5 mensajes de dialogo (se muestra el siguiente dando
click al botn Aceptar) con diferente icono, como se muestra en la siguiente
imagen (Sin el bonito fondo verde ni el texto obviamente :P)

El segundo mtodo que enlistamos pide lo mismo que el primero pero adems
podemos poner un cono a nuestro gusto en el ltimo argumento (Icon), en lugar de
uno de los que ya vienen por parte deJOptionPane.

Me gustara extenderme ms en el uso de JOptionPane para ver los dems dilogos,


como el de pregunta (muy til) o los de entrada, pero me saldra un poco del tema
de los mensajes as que si quieren saber ms sobre estos dilogos les dejo
la documentacin de JOptionPane aqu para que experimenten por su cuenta, o
esperen mi siguiente entrada, encantado de escribir para ustedes ;), saludos.
Algo muy comn a la hora de programar, es como avisar al usuario
de ciertas actividades, o como hacerlo escoger para recapacitar o
darle la oportunidad de elegir que es lo que se desea hacer, para
esto, en Java tenemos elementos muy sencillos pero funcionales,
que nos permiten mostrar mensajes de dialogo, o cuadros de
dialogo, como los prefieran llamar, estos elementos son
sumamente sencillos de utilizar con un poco de lectura al API de
Java, sin embargo, como siempre, surgen las dudas, y para
aclararlas dedicar este post para mostrarles los diferentes tipos de
dilogos que podemos utilizar en Swing, bien, para esto he
preparado lo siguiente (Utilizando Netbeans como IDE):
Un proyecto con un nombre cualquiera (En este caso
SerProgramador.es).
Un paquete donde iremos trabajando durante este
post.
Y con esto, comencemos a trabajar, dado que existen varias formas
de hacer distintos tipos de cuadros de dilogo, comenzaremos a
verlos uno por uno para no romper con el esquema de trabajo, los
cuadros de dialogo que veremos en este post estarn basados en
el objeto JOptionPane, un objeto de java que nos permite
precisamente trabajar con cuadros de dialog, los mtodos de este
objeto que veremos, sern los siguientes:
showMessageDialog
showInputDialog
showConfirmDialog
showOptionDialog
De antemano les comento que la entrada la ir actualizando hasta
terminarla, pero por lo pronto ya tenemos algo con que comenzar:

showMessageDialog
Ok, para probar est mtodo, lo nico que haremos ser crear una
clase con un mtodo main, vamos a suponer que la clase se llama,
MessageDialog:
1 public class MessageDialog {

3 public static void main(String[] args) {

5 }

6}

Bien, fcil, ahora, vamos a jugar un poco con esto, para acceder a
este mtodo simplemente tenemos que importar la clase
JOptionPane, aunque normalmente netbeans lo hace por nosotros
pondr la lnea de cdigo por cualquier cosa:

1 import javax.swing.JOptionPane;

Una vez importado lo nico que tenemos que hacer es teclear el


nombre de la clase ms el mtodo que queremos utilizar, teniendo
en cuenta una cosa, el mtodo showMessageDialog tiene 3
sobrecargas del mtodo, uno que recibe 2 parametros, otro de 4, y
otro de 5, vamos a ver uno por uno para observar como vamos
personalizando cada vez ms nuestro mensaje, el primero que
veremos es el de dos parametros:

1 public class MessageDialog {

3 public static void main(String[] args) {

4 JOptionPane.showMessageDialog(null, "Operacin realizada correctamente");

5 }

7}
Bien, explicacin rpida, el primer parmetro, representa el
componente padre sobre el cual el mensaje se mostrar, si
nosotros no le enviamos ninguno, como en este caso lo estamos
haciendo, simplemente mostrar una ventana similiar a la siguiente:

Si nosotros le enviamos un
componente, se colocar encima de el, sin ninguna variacin en el
funcionamiento, el segundo parmetro obviamente, es el mensaje
que queremos observar, y listo, un mensaje fcil de hacer, bien,
ahora veamos otra cosa, el anterior fue el mtodo con dos
parmetros, ahora bien, cuando utilizamos el mtodo de cuatro
parmetros tenemos un poco ms de personalizacin, veamos:

JOptionPane.showMessageDialog(null, "Mensaje dentro de la ventana", "Mensaje en la


1
barra de titulo", JOptionPane.WARNING_MESSAGE);

El funcionamiento de este mtodo es un poco diferente, pero ms


til:
Primer Parmetro: El componente padre sobre el cual
se mostrar la ventana de dialogo.
Segundo Parmetro: El mensaje que se mostrar
dentro de la ventana.
Tercer Parmetro: El mensaje que se mostrar en la
barra de titulo.
Cuarto Parmetro: Una variable Int contenida por
JOptionPane, que representa el icono que se mostrar en
la ventana, algunos de los valores posibles
son: INFORMATION_MESSAGE , WARNING_MESSAGE ,
QUESTION_MESSAGE , PLAIN_MESSAGE, ERROR_MESSAGE
En el caso anterior, el mensaje se vera de esta manera:

Como ven, los textos corresponden


a los mensajes que se muestran, y al usar un WARNING_MESSAGE
se presenta con un icono de alerta. Ahora bien, para el ltimo
mtodo, vamos a necesitar crear un icono personalizado, para esto,
yo me e descargado una imagen de 5050 que se llama icon-
pencil-png.png y la e colocado en un paquete llamado resources
dentro de mi proyecto, lo siguiente, ser crear un icono, para esto,
vamos a crear una clase llamada MyIcon que implemente la
interfaz Icon, el contenido de la clase ser el siguiente:

1 import java.awt.Component;

2 import java.awt.Graphics;

3 import java.awt.Image;

4 import javax.swing.Icon;

5 import javax.swing.ImageIcon;

7 public class MyIcon implements Icon{

9 @Override

1 public void paintIcon(Component c, Graphics g, int x, int y) {


0
Image image = new ImageIcon(getClass().getResource("/resources/icon-pencil-
1 png.png")).getImage();
1
g.drawImage(image, x, y, c);
1
2 }

1
3
@Override
1
public int getIconWidth() {
4
return 50;
1
5 }
1
6

1
7

1
8

1
9 @Override
2 public int getIconHeight() {
0
return 50;
2
1 }

2
2
}
2
3

2
4

2
5

Listo, con esto tendremos nuestro icono, ya se, tanto rollo para un
icono, pero bueno, somos programadores, ahora bien,
necesitaremos, antes de mostrar nuestro mensaje de dialogo, crear
una instancia de esta clase, y posteriormente, podremos utilizar el
mtodo de 5 parametros:

MyIcon icon = new MyIcon();


1
JOptionPane.showMessageDialog(null, "Mensaje dentro de la ventana", "Titulo",
2
JOptionPane.DEFAULT_OPTION, icon);

Si se dan cuenta, los parmetros son idnticos a los parmetros


que se la pasan al mtodo de cuatro parmetros, solo que esta vez,
existe un quinto parmetro, que nos permite enviar un icono,
proporcionando un resultado similar al siguiente:
Y listo, tenemos una manera
coqueta de hacer mensajes de alerta con el
showMessageDialog

showInputDialog
Bien, para trabajar con el showInputDialog, vamos a crear
nuevamente una clase a la cual le llame InputDialog nuevamente
con un mtodo main:

1 public class InputDialog {

2 public static void main(String[] args) {

4 }

5}

Bien, de antemano les digo que nuevamente necesitaremos el


import, as que despues de agregarlo comenzaremos a trabajar, y
esta vez lo haremos ms rpido ya que despues de leer la primera
parte, habrn comprendido como est la dinmica de los dialogos.
El inputDialog contiene 6 sobrecargas del mtodo, los cuales
tienen los siguientes parametros y ojo, TODOS (Con excepcin del
ultimo) devuelven un String:
Mtodo 1:

1 JOptionPane.showInputDialog(Mensaje);
Explicacin: Bueno, este es el mtodo ms sencillo, slo requiere
de un parmetro, y este es el mensaje que va a mostrar, como les
comente en un principio, la mayoria de los InputDialog devuelven
un String, por consecuente, su utilizacin sera la siguiente:

1 String respuesta = JOptionPane.showInputDialog("Escribe tu nombre");

De esta manera, tendramos un resultado como:

Mtodo 2:

1 JOptionPane.showInputDialog(Mensaje, Texto Inicial);

Explicacion: Nuevamente el mtodo es sumamente sencillo, dado


que su utilizacin quedara de esta manera:

1 String respuesta = JOptionPane.showInputDialog("Cual es su nombre?", "atxy2k");

Quedando el resultado de esta manera:

Mtodo 3:
1 JOptionPane.showInputDialog(Componente padre, Mensaje);

Explicacion: Este mtodo es muy similar al primero, la nica


diferencia es que este nos permite ubicar el InputDialog sobre un
componente, en este caso su utilizacin sera solo remplazar el
primer parametro por el componente o null si no existe un
componente:

1 String respuesta = JOptionPane.showInputDialog(null, "Escribe tu nombre");

El resultado sera el mismo que el del mtodo 1:

Mtodo 4:

1 JOptionPane.showInputDialog(Componente padre, Mensaje, Texto Inicial);

Explicacin: Este mtodo es muy similar al anterior, muy sencillo de


entender, el padre, el mensaje que dir el cuadro de dialogo y por
ltimo, un texto por defecto, con un uso como el siguiente:

1 JOptionPane.showinputDialog(null, "Cual es su nombre?", "atxy2k");


Nos proporcionar un resultado similar al del mtodo 2:

Mtodo 5:

JOptionPane.showInputDialog(Componente padre, Mensaje, Titulo, Tipo De Mensaje


1
(WARNING,ERROR,ETC.) );

Explicacin: Este mtodo es algo diferente a los anteriores, aunque


tambin incluye el padre, el segundo parmetro representar el
texto del cuadro de texto y el tercero el ttulo de la ventana, por
ultimo, tenemos la posibilidad de enviar un parmetro tal y como lo
hicimos en el showMessageDialog para seleccionar un icono por
defecto, un ejemplo de uso sera:

String respuesta = JOptionPane.showInputDialog(null, "Escriba nuevamente su nombre",


1
"Error!", JOptionPane.ERROR_MESSAGE);

Dando un resultado como el siguiente:

Mtodo 6:

1 JOptionPane.showInputDialog(Componente padre, Mensaje, Titulo, Tipo De Mensaje, Icono,


Arreglo de opciones, Seleccion por defecto );

Explicacin: Este es mi favorito, este mtodo tiene algo en


particular independientemente de las opciones por default, y es
que, pasandole como parametro un arreglo de objetos, que
tambin podemos hacer con los mtodos anteriores, este mtodo
genera un JComboBox para mostrar las posibles selecciones, es
algo que me gusta, y encima de todo, nos permite pasar un icono,
por ejemplo, voy a utilizar el icono que hicimos anteriormente para
el mismo ejemplo:

String[] carreras = {
1
"Ingeniera en sistemas computacionales",
2
"Ingeniera industrial",
3
"Ingeniera en mecatrnica",
4
"Ingeniera en informatica",
5
"Ingeniera petroqumica"
6
};
7
MyIcon icon = new MyIcon();
8
String resp = (String) JOptionPane.showInputDialog(null, "Seleccione una carrera a
9
cursar", "Carrera", JOptionPane.DEFAULT_OPTION, icon, carreras, carreras[0]);

Con este pequeo cdigo, tendramos un resultado muy similar al

siguiente: Excelente
presentacin para un cuadro de dialogo

showConfirmDialog
Una vez que hemos dominado los mtodos anteriores, utilizar un
showConfirmDialog es super sencillo, este, cuenta con cuatro
sobrecargas del mtodo, y los veremos de manera super rpida,
para esto hagamos una clase con cualquier nombre (en mi caso
showConfirmDialog) y pongamosle un mtodo main para comenzar
a trabajar, y veamos como funcionan estos mtodos:
Mtodo 1:

1 JOptionPane.showConfirmDialog(Componente padre, "Mensaje");

Este es muy sencillo, el componente padre pues como


anteriormente mencionamos es aquel sobre el cual se mostrar el
mensaje, y el mensaje es lo que dir el mensaje, como es un
dialogo de confirmacin, este, por default mostrar las opciones si,
no y cancelar, y devolver un entero con la opcin seleccionada
como si estuvieramos en un vector, es decir, si seleccionamos si
retornar un cero, si es no un 1 y si es cancelar un 2, por ejemplo:

1 int resp = JOptionPane.showConfirmDialog(null, "Est seguro?");

De esta manera tendramos un resultado como el siguiente:

Mtodo 2:

JOptionPane.showConfirmDialog(Componente padre, "Mensaje", "Titulo","Tipo de


1
seleccion");

Este componente es un poco mas completo, las primeras dos


opciones son las mismas que el mtodo anterior, pero agregamos
tal y como antes el titulo de la ventana, y un parmetro nuevo, el
tipo de seleccin, es decir, que tipo de dialogo ser, si es un
dialogo de si y no, o si tiene las opciones si, no y cancelar por
defecto, por ejemplo:

int resp = JOptionPane.showConfirmDialog(null, "Esta seguro?", "Alerta!",


1
JOptionPane.YES_NO_OPTION);

Los posibles valores son


YES_NO_OPTION o YES_NO_CANCEL_OPTION, sencillitos.
Mtodo 3:

JOptionPane.showConfirmDialog(Componente padre, "Mensaje", "titulo", "tipo de


1
seleccion", "tipo de mensaje");

Bueno, este mtodo es identico al anterior, solo que se le agrega el


tipo de mensaje para que nos reconozca un icono por defecto, tal y
como lo hicimos con el InputDialog y el MessageDialog, por
ejemplo:

int resp = JOptionPane.showConfirmDialog(null, "Esta seguro?", "Alerta!",


1
JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE);

Teniendo un resultado como el siguiente, como pueden ver, las


variables que utilizamos en los mtodos del JOptionPane siempre
son casi las mismas, si estan siguiente este tutorial paso a paso, a
este punto ya lo deben estar viendo super fcil, el cdigo del

mtodo anterior sera el siguiente:


Mtodo 4:

JOptionPane.showConfirmDialog(Componente padre, "Mensaje", "titulo", "tipo de


1
seleccion", "tipo de mensaje");

Y el que nos faltaba, el mtodo al cual podemos pasarle un icono


personalizado simplemente por esttica, veamos un ejemplo con el
mismo icono que programamos al principio:

MyIcon icon = new MyIcon();


1
int resp = JOptionPane.showConfirmDialog(null, "Esta seguro?", "Alerta!",
2
JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, icon);

Teniendo un resultado muy similar a los anteriores y funcionando


igual que todos los showConfirmDialog como pueden observar:

showOptionDialog
El mtodo anterior, nos enseo una manera de darle a escoger al
usuario mas de una opcin en una ventana de dialogo, como una
manera ms personalizada de hacer esto, podemos utilizar el
mtodo showOptionDialog que nos proporciona JOptionPane,
este mtodo no tiene sobrecarga y cuenta con los siguientes
parmetros.

JOptionPane.showOptionDialog(padre, mensaje, titulo, tipo de seleccion, tipo de mensaje,


1
icono, opciones, valor inicial);

Los nicos que hay que dejar en claro despus de leer este post
son el tipo de seleccin, que utilizamos un tipo de seleccion como
el del showConfirmDialog, el tipo de mensaje que ya sabemos cual
es, y las opciones, que es un arreglo con las opciones que se le
mostraran al usuario y por ultimo, el valor por default, cabe
destacar, que este mtodo, devuelve un valor en int del valor que
haya seleccionado el usuario, veamos un ejemplo de esto:

MyIcon icon = new MyIcon();


1
String[] options = {"Opcion A", "Opcion B", "Opcion C", "Opcion D"};
2
int seleccion = JOptionPane.showOptionDialog(null, "Es necesario que seleccione una
3 opcion", "Titulo", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, icon,
options, options[0]);

Ok explicacin, el icono sabemos que es de la clase que


anteriormente utilizamos, el arreglo de opciones son las que se van
a mostrar en la ventana, el primer parametro que le mando es null,
precisamente por que lo estoy corriendo en una clase con mtodo
main sin JFrame y no hay componente padre, posteriormente envo
el mensaje que quiero que aparezca dentro del cuadro de dialogo,
luego el titulo, luego le mando un DEFAULT_OPTION solo para
que trate al cuadro de dialogo como un cuadro normal, un
QUESTION_MESSAGE que en realidad no tiene sentido a menos
que en el icono enviemos null, por tanto, no tiene caso el
parmetro, luego paso el icono personalizado que quiero que tenga
mi mensaje de dialogo, el arreglo de opciones y la opcin por
defecto, el cual, me dara un resultado como el siguiente:

Teniendo en cuenta lo anterior, esto significa, que si selecciono la


opcion C por ejemplo, el valor entero que me devolver el mtodo
ser 2, por que es la posicin 2 del arreglo que enviamos como
parmetro, y lo mismo con las otras opciones. Como vern, es muy
sencillo crear cuadros de dialogo en Java, solo hay que conocer
esta pequea clase, posteriormente, blogueare algo ms llamativo,
como crear cuadros de dialogo personalizados con la clase JDialog
de Java, para esto, dedicar una entrada completa, espero les sea
de ayuda. Saludos.

http://youtube.com/watch?v=hBewvo8KS6E

http://youtube.com/watch?v=QvlBuCpM1xo

http://youtube.com/watch?v=hBewvo8KS6E&t=982s

http://youtube.com/watch?v=xuO94ROMCsE

http://youtube.com/watch?v=_AtUevapQ80

http://youtube.com/watch?v=yzucvVv4dWI

http://youtube.com/watch?v=G4EgwvdMFKI

http://youtube.com/watch?v=4YkUYcczW2Y

localhost/phpmyadmin/index.php?db=dodega&token=da372931a29453d249d100742879dc4c
<?php

/* Servers configuration */
$i = 0;

$cfg['blowfish_secret'] = 'h]C+{nqW$omNoTIkCwC$%z-LTcy%p6_j$|
$Wv[mwngi~|e'; //What you want

/* Server: localhost [1] */


$i++;
$cfg['Servers'][$i]['verbose'] = 'Local Databases';
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';

// Hidden databases in PhpMyAdmin left panel


//$cfg['Servers'][$i]['hide_db'] = '(information_schema|mysql|
performance_schema|sys)';

// Allow connection without password


$cfg['Servers'][$i]['AllowNoPassword'] = true;

// Suppress Warning about pmadb tables


$cfg['PmaNoRelation_DisableWarning'] = true;

// To have PRIMARY & INDEX in table structure export


//$cfg['Export']['sql_drop_table'] = true;
//$cfg['Export']['sql_if_not_exists'] = true;

$cfg['MySQLManualBase'] = 'http://dev.mysql.com/doc/refman/5.7/en/';
/* End of servers configuration */

?>

<?php

/* Servers configuration */
$i = 0;

$cfg['blowfish_secret'] = 'h]C+{nqW$omNoTIkCwC$%z-LTcy%p6_j$|
$Wv[mwngi~|e'; //What you want
/* Server: localhost [1] */
$i++;
$cfg['Servers'][$i]['verbose'] = 'localhost';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['AllowNopassword'] = 'true';

// Hidden databases in PhpMyAdmin left panel


//$cfg['Servers'][$i]['hide_db'] = '(information_schema|mysql|
performance_schema|sys)';

// Allow connection without password


$cfg['Servers'][$i]['AllowNoPassword'] = true;

// Suppress Warning about pmadb tables


$cfg['PmaNoRelation_DisableWarning'] = true;

// To have PRIMARY & INDEX in table structure export


//$cfg['Export']['sql_drop_table'] = true;
//$cfg['Export']['sql_if_not_exists'] = true;

$cfg['MySQLManualBase'] = 'http://dev.mysql.com/doc/refman/5.7/en/';
/* End of servers configuration */

?>

http://localhost/phpmyadmin/sql.php?
server=1&db=registro&table=personal&pos=0&token=5ee4cb8e277f3ae81794c36a1e8a6dda

Das könnte Ihnen auch gefallen