gestionClientesDAO

This commit is contained in:
2024-05-25 18:49:48 +02:00
parent dd0aed8d06
commit 4f05a06676
27 changed files with 2261 additions and 62 deletions

View File

@@ -1,13 +1,13 @@
package iesthiar;
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
/**
* JavaFX App
*/
@@ -17,7 +17,7 @@ public class App extends Application {
@Override
public void start(Stage stage) throws IOException {
scene = new Scene(loadFXML("primary"), 640, 480);
scene = new Scene(loadFXML("pruebaConexion"), 640, 480);
stage.setScene(scene);
stage.show();
}

View File

@@ -0,0 +1,36 @@
package iesthiar;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class EjemploSQLite {
public static void main(String[] args) {
try (Connection c = DriverManager.getConnection("jdbc:sqlite:mibd.db");
PreparedStatement pstm=c.prepareStatement("SELECT name FROM sqlite_master WHERE type='table' AND name='cliente';");
) {
System.out.println("Base de datos conectada");
// Crear las tablas si es necesario
try (ResultSet rs=pstm.executeQuery()){
if (rs.next()){
System.out.println("Existe");
}
else {
System.out.println("No existe");
pstm=c.prepareStatement("create table cliente(
)");
}
} catch (Exception e){
System.out.println("Error en la consulta");
}
} catch (Exception e) {
System.out.println("Error al entrar en la BD");
e.printStackTrace();
}
}
}

View File

@@ -0,0 +1,40 @@
package iesthiar;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javafx.fxml.FXML;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
public class PreparadasController {
@FXML
private TextArea salida;
@FXML
private TextField nombre;
@FXML
private void conectar() throws IOException {
String url = "jdbc:mysql://172.18.185.243:3306/tienda";
String sentenciasql = "select * from clientes where nombre=?";
try (Connection conn = DriverManager.getConnection(url, "root", "example");
PreparedStatement preparada=conn.prepareStatement(sentenciasql);) {
preparada.setString(1, nombre.getText());
try (ResultSet res=preparada.executeQuery()) {
while (res.next()){
salida.appendText(res.getInt(1)+":"+res.getString(2)+" - "+res.getString(3)+"\n");
}
} catch (Exception e) {
salida.appendText("Error en la consulta");
}
salida.appendText("Conexión establecida ");
} catch (SQLException e) {
salida.appendText("Error en la conexión a la base de datos");
}
}
}

View File

@@ -1,12 +0,0 @@
package iesthiar;
import java.io.IOException;
import javafx.fxml.FXML;
public class PrimaryController {
@FXML
private void switchToSecondary() throws IOException {
App.setRoot("secondary");
}
}

View File

@@ -0,0 +1,95 @@
package iesthiar;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Optional;
import javafx.fxml.FXML;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.TextInputDialog;
public class PruebaConexionController {
@FXML
private TextArea salida;
@FXML
private TextArea salidaRes;
@FXML
private TextArea salidaRes3;
@FXML
private TextField servidor;
@FXML
private TextField puerto;
@FXML
private TextField baseDatos;
@FXML
private TextField usuario;
@FXML
private TextField nombre;
@FXML
private void conectar() throws IOException {
String url = "jdbc:mysql://localhost:3306/tienda";
// String sentenciasql = "select * from clientes";
try (Connection conn = DriverManager.getConnection(url, "root", "example");) {
salida.appendText("Conexión establecida ");
} catch (SQLException e) {
salida.appendText("Error en la conexión a la base de datos");
}
}
@FXML
private void conectarRes() throws IOException {
String url = "jdbc:mysql://" + servidor.getText() + ":" + puerto.getText() + "/" + baseDatos.getText();
String sentenciasql = "select * from clientes";
try (Connection conn = DriverManager.getConnection(url, usuario.getText(), pideClave());
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sentenciasql)) {
salidaRes.appendText("Conexión establecida \n");
while (rs.next()) {
salidaRes.appendText("Id: " + rs.getInt(1) + " Nombre: " + rs.getString("nombre") + " Dirección: "
+ rs.getString(3) + "\n");
}
} catch (SQLException e) {
salidaRes.appendText("Error en la conexión a la base de datos");
}
}
private String pideClave() {
TextInputDialog pregunta = new TextInputDialog();
pregunta.setTitle("Conexión a la BD");
pregunta.setHeaderText("Conexión a "+baseDatos.getText()+" en "+servidor.getText());
pregunta.setContentText("Introduce la clave del usuario "+usuario.getText());
// Traditional way to get the response value.
Optional<String> result = pregunta.showAndWait();
if (result.isPresent()) {
return result.get();
} else return "";
}
@FXML
private void conectarRes3() throws IOException {
String url = "jdbc:mysql://172.18.185.243:3306/tienda";
// ' or 1=1 or nombre='
// ' or ''='
String sentenciasql = "select * from clientes where nombre ='"+nombre.getText()+"'";
try (Connection conn = DriverManager.getConnection(url, "root", "example");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sentenciasql)) {
salidaRes3.appendText("Conexión establecida \n");
while (rs.next()) {
salidaRes3.appendText("Id: " + rs.getInt(1) + " Nombre: " + rs.getString("nombre") + " Dirección: "
+ rs.getString(3) + "\n");
}
} catch (SQLException e) {
salidaRes3.appendText("Error en la conexión a la base de datos");
}
}
}

View File

@@ -1,12 +0,0 @@
package iesthiar;
import java.io.IOException;
import javafx.fxml.FXML;
public class SecondaryController {
@FXML
private void switchToPrimary() throws IOException {
App.setRoot("primary");
}
}

View File

@@ -0,0 +1,27 @@
package iesthiar;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class _49_EjemploCompleto {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/tienda";
String sentenciasql = "select * from clientes";
try (Connection conn = DriverManager.getConnection(url, "root", "example");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sentenciasql)) {
System.out.println("Conexión establecida ");
while (rs.next()) {
System.out.print("Id: " + rs.getInt(1));
System.out.print(" Nombre: " + rs.getString("nombre"));
System.out.println(" Dirección: " + rs.getString(3));
}
} catch (SQLException e) {
System.err.println("Error en la conexión a la base de datos");
}
}
}

View File

@@ -0,0 +1,359 @@
package iesthiar.gestorClientes;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* @author lionel
*/
public class DBManager {
// Conexión a la base de datos
private static Connection conn = null;
// Configuración de la conexión a la base de datos
private static final String DB_HOST = "localhost";
private static final String DB_PORT = "3306";
private static final String DB_NAME = "tienda";
private static final String DB_URL = "jdbc:mysql://" + DB_HOST + ":" + DB_PORT + "/" + DB_NAME + "?serverTimezone=UTC";
private static final String DB_USER = "root";
private static final String DB_PASS = "";
private static final String DB_MSQ_CONN_OK = "CONEXIÓN CORRECTA";
private static final String DB_MSQ_CONN_NO = "ERROR EN LA CONEXIÓN";
// Configuración de la tabla Clientes
private static final String DB_CLI = "clientes";
private static final String DB_CLI_SELECT = "SELECT * FROM " + DB_CLI;
private static final String DB_CLI_ID = "id";
private static final String DB_CLI_NOM = "nombre";
private static final String DB_CLI_DIR = "direccion";
//////////////////////////////////////////////////
// MÉTODOS DE CONEXIÓN A LA BASE DE DATOS
//////////////////////////////////////////////////
;
/**
* Intenta cargar el JDBC driver.
* @return true si pudo cargar el driver, false en caso contrario
*/
public static boolean loadDriver() {
try {
System.out.print("Cargando Driver...");
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
System.out.println("OK!");
return true;
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
return false;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
/**
* Intenta conectar con la base de datos.
*
* @return true si pudo conectarse, false en caso contrario
*/
public static boolean connect() {
try {
System.out.print("Conectando a la base de datos...");
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
System.out.println("OK!");
return true;
} catch (SQLException ex) {
ex.printStackTrace();
return false;
}
}
/**
* Comprueba la conexión y muestra su estado por pantalla
*
* @return true si la conexión existe y es válida, false en caso contrario
*/
public static boolean isConnected() {
// Comprobamos estado de la conexión
try {
if (conn != null && conn.isValid(0)) {
System.out.println(DB_MSQ_CONN_OK);
return true;
} else {
return false;
}
} catch (SQLException ex) {
System.out.println(DB_MSQ_CONN_NO);
ex.printStackTrace();
return false;
}
}
/**
* Cierra la conexión con la base de datos
*/
public static void close() {
try {
System.out.print("Cerrando la conexión...");
conn.close();
System.out.println("OK!");
} catch (SQLException ex) {
ex.printStackTrace();
}
}
//////////////////////////////////////////////////
// MÉTODOS DE TABLA CLIENTES
//////////////////////////////////////////////////
;
// Devuelve
// Los argumentos indican el tipo de ResultSet deseado
/**
* Obtiene toda la tabla clientes de la base de datos
* @param resultSetType Tipo de ResultSet
* @param resultSetConcurrency Concurrencia del ResultSet
* @return ResultSet (del tipo indicado) con la tabla, null en caso de error
*/
public static ResultSet getTablaClientes(int resultSetType, int resultSetConcurrency) {
try {
Statement stmt = conn.createStatement(resultSetType, resultSetConcurrency);
ResultSet rs = stmt.executeQuery(DB_CLI_SELECT);
//stmt.close();
return rs;
} catch (SQLException ex) {
ex.printStackTrace();
return null;
}
}
/**
* Obtiene toda la tabla clientes de la base de datos
*
* @return ResultSet (por defecto) con la tabla, null en caso de error
*/
public static ResultSet getTablaClientes() {
return getTablaClientes(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
}
/**
* Imprime por pantalla el contenido de la tabla clientes
*/
public static void printTablaClientes() {
try {
ResultSet rs = getTablaClientes(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
while (rs.next()) {
int id = rs.getInt(DB_CLI_ID);
String n = rs.getString(DB_CLI_NOM);
String d = rs.getString(DB_CLI_DIR);
System.out.println(id + "\t" + n + "\t" + d);
}
rs.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
//////////////////////////////////////////////////
// MÉTODOS DE UN SOLO CLIENTE
//////////////////////////////////////////////////
;
/**
* Solicita a la BD el cliente con id indicado
* @param id id del cliente
* @return ResultSet con el resultado de la consulta, null en caso de error
*/
public static ResultSet getCliente(int id) {
try {
// Realizamos la consulta SQL
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
String sql = DB_CLI_SELECT + " WHERE " + DB_CLI_ID + "='" + id + "';";
//System.out.println(sql);
ResultSet rs = stmt.executeQuery(sql);
//stmt.close();
// Si no hay primer registro entonces no existe el cliente
if (!rs.first()) {
return null;
}
// Todo bien, devolvemos el cliente
return rs;
} catch (SQLException ex) {
ex.printStackTrace();
return null;
}
}
/**
* Comprueba si en la BD existe el cliente con id indicado
*
* @param id id del cliente
* @return verdadero si existe, false en caso contrario
*/
public static boolean existsCliente(int id) {
try {
// Obtenemos el cliente
ResultSet rs = getCliente(id);
// Si rs es null, se ha producido un error
if (rs == null) {
return false;
}
// Si no existe primer registro
if (!rs.first()) {
rs.close();
return false;
}
// Todo bien, existe el cliente
rs.close();
return true;
} catch (SQLException ex) {
ex.printStackTrace();
return false;
}
}
/**
* Imprime los datos del cliente con id indicado
*
* @param id id del cliente
*/
public static void printCliente(int id) {
try {
// Obtenemos el cliente
ResultSet rs = getCliente(id);
if (rs == null || !rs.first()) {
System.out.println("Cliente " + id + " NO EXISTE");
return;
}
// Imprimimos su información por pantalla
int cid = rs.getInt(DB_CLI_ID);
String nombre = rs.getString(DB_CLI_NOM);
String direccion = rs.getString(DB_CLI_DIR);
System.out.println("Cliente " + cid + "\t" + nombre + "\t" + direccion);
} catch (SQLException ex) {
System.out.println("Error al solicitar cliente " + id);
ex.printStackTrace();
}
}
/**
* Solicita a la BD insertar un nuevo registro cliente
*
* @param nombre nombre del cliente
* @param direccion dirección del cliente
* @return verdadero si pudo insertarlo, false en caso contrario
*/
public static boolean insertCliente(String nombre, String direccion) {
try {
// Obtenemos la tabla clientes
System.out.print("Insertando cliente " + nombre + "...");
ResultSet rs = getTablaClientes(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
// Insertamos el nuevo registro
rs.moveToInsertRow();
rs.updateString(DB_CLI_NOM, nombre);
rs.updateString(DB_CLI_DIR, direccion);
rs.insertRow();
// Todo bien, cerramos ResultSet y devolvemos true
rs.close();
System.out.println("OK!");
return true;
} catch (SQLException ex) {
ex.printStackTrace();
return false;
}
}
/**
* Solicita a la BD modificar los datos de un cliente
*
* @param id id del cliente a modificar
* @param nombre nuevo nombre del cliente
* @param direccion nueva dirección del cliente
* @return verdadero si pudo modificarlo, false en caso contrario
*/
public static boolean updateCliente(int id, String nuevoNombre, String nuevaDireccion) {
try {
// Obtenemos el cliente
System.out.print("Actualizando cliente " + id + "... ");
ResultSet rs = getCliente(id);
// Si no existe el Resultset
if (rs == null) {
System.out.println("Error. ResultSet null.");
return false;
}
// Si tiene un primer registro, lo eliminamos
if (rs.first()) {
rs.updateString(DB_CLI_NOM, nuevoNombre);
rs.updateString(DB_CLI_DIR, nuevaDireccion);
rs.updateRow();
rs.close();
System.out.println("OK!");
return true;
} else {
System.out.println("ERROR. ResultSet vacío.");
return false;
}
} catch (SQLException ex) {
ex.printStackTrace();
return false;
}
}
/**
* Solicita a la BD eliminar un cliente
*
* @param id id del cliente a eliminar
* @return verdadero si pudo eliminarlo, false en caso contrario
*/
public static boolean deleteCliente(int id) {
try {
System.out.print("Eliminando cliente " + id + "... ");
// Obtenemos el cliente
ResultSet rs = getCliente(id);
// Si no existe el Resultset
if (rs == null) {
System.out.println("ERROR. ResultSet null.");
return false;
}
// Si existe y tiene primer registro, lo eliminamos
if (rs.first()) {
rs.deleteRow();
rs.close();
System.out.println("OK!");
return true;
} else {
System.out.println("ERROR. ResultSet vacío.");
return false;
}
} catch (SQLException ex) {
ex.printStackTrace();
return false;
}
}
}

View File

@@ -0,0 +1,159 @@
package iesthiar.gestorClientes;
import java.util.Scanner;
/**
*
* @author lionel
*/
public class GestionClientes {
public static void main(String[] args) {
DBManager.loadDriver();
DBManager.connect();
boolean salir = false;
do {
salir = menuPrincipal();
} while (!salir);
DBManager.close();
}
public static boolean menuPrincipal() {
System.out.println("");
System.out.println("MENU PRINCIPAL");
System.out.println("1. Listar clientes");
System.out.println("2. Nuevo cliente");
System.out.println("3. Modificar cliente");
System.out.println("4. Eliminar cliente");
System.out.println("5. Salir");
Scanner in = new Scanner(System.in);
int opcion = pideInt("Elige una opción: ");
switch (opcion) {
case 1:
opcionMostrarClientes();
return false;
case 2:
opcionNuevoCliente();
return false;
case 3:
opcionModificarCliente();
return false;
case 4:
opcionEliminarCliente();
return false;
case 5:
return true;
default:
System.out.println("Opción elegida incorrecta");
return false;
}
}
public static int pideInt(String mensaje){
while(true) {
try {
System.out.print(mensaje);
Scanner in = new Scanner(System.in);
int valor = in.nextInt();
//in.nextLine();
return valor;
} catch (Exception e) {
System.out.println("No has introducido un número entero. Vuelve a intentarlo.");
}
}
}
public static String pideLinea(String mensaje){
while(true) {
try {
System.out.print(mensaje);
Scanner in = new Scanner(System.in);
String linea = in.nextLine();
return linea;
} catch (Exception e) {
System.out.println("No has introducido una cadena de texto. Vuelve a intentarlo.");
}
}
}
public static void opcionMostrarClientes() {
System.out.println("Listado de Clientes:");
DBManager.printTablaClientes();
}
public static void opcionNuevoCliente() {
Scanner in = new Scanner(System.in);
System.out.println("Introduce los datos del nuevo cliente:");
String nombre = pideLinea("Nombre: ");
String direccion = pideLinea("Dirección: ");
boolean res = DBManager.insertCliente(nombre, direccion);
if (res) {
System.out.println("Cliente registrado correctamente");
} else {
System.out.println("Error :(");
}
}
public static void opcionModificarCliente() {
Scanner in = new Scanner(System.in);
int id = pideInt("Indica el id del cliente a modificar: ");
// Comprobamos si existe el cliente
if (!DBManager.existsCliente(id)) {
System.out.println("El cliente " + id + " no existe.");
return;
}
// Mostramos datos del cliente a modificar
DBManager.printCliente(id);
// Solicitamos los nuevos datos
String nombre = pideLinea("Nuevo nombre: ");
String direccion = pideLinea("Nueva dirección: ");
// Registramos los cambios
boolean res = DBManager.updateCliente(id, nombre, direccion);
if (res) {
System.out.println("Cliente modificado correctamente");
} else {
System.out.println("Error :(");
}
}
public static void opcionEliminarCliente() {
Scanner in = new Scanner(System.in);
int id = pideInt("Indica el id del cliente a eliminar: ");
// Comprobamos si existe el cliente
if (!DBManager.existsCliente(id)) {
System.out.println("El cliente " + id + " no existe.");
return;
}
// Eliminamos el cliente
boolean res = DBManager.deleteCliente(id);
if (res) {
System.out.println("Cliente eliminado correctamente");
} else {
System.out.println("Error :(");
}
}
}

View File

@@ -0,0 +1,744 @@
package iesthiar.gestorClientes;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
public class GestionClientesIGU extends javax.swing.JFrame {
private ResultSet rsClientes;
private boolean clienteValido = false;
public GestionClientesIGU() {
// Inicilización de componentes gráficos
initComponents();
// Cargamos driver y conectamos con la BD
DBManager.loadDriver();
DBManager.connect();
// Obtenemos el ResultSet de clientes y mostramos el primero
obtenerClientes();
muestraClientePrimero();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jfNuevoCliente = new javax.swing.JFrame();
lblVNCTitulo = new javax.swing.JLabel();
jpVNC = new javax.swing.JPanel();
lblVNCNombre = new javax.swing.JLabel();
txtVNCNombre = new javax.swing.JTextField();
lblVNCDireccion = new javax.swing.JLabel();
txtVNCDireccion = new javax.swing.JTextField();
btnVNCAceptar = new javax.swing.JButton();
btnVNCCancelar = new javax.swing.JButton();
jfEditarCliente = new javax.swing.JFrame();
lblVECTitulo = new javax.swing.JLabel();
jpVEC = new javax.swing.JPanel();
lblVECId = new javax.swing.JLabel();
lblVECIdCliente = new javax.swing.JLabel();
lblVECNombre = new javax.swing.JLabel();
txtVECNombre = new javax.swing.JTextField();
lblVECDireccion = new javax.swing.JLabel();
txtVECDireccion = new javax.swing.JTextField();
btnVECAceptar = new javax.swing.JButton();
btnVECCancelar = new javax.swing.JButton();
jPanelVP = new javax.swing.JPanel();
lblTitulo = new javax.swing.JLabel();
btnPrimero = new javax.swing.JButton();
btnAnterior = new javax.swing.JButton();
btnSiguiente = new javax.swing.JButton();
btnUltimo = new javax.swing.JButton();
lblId = new javax.swing.JLabel();
lblIdCliente = new javax.swing.JLabel();
lblNombre = new javax.swing.JLabel();
lblNombreCliente = new javax.swing.JLabel();
lblDireccion = new javax.swing.JLabel();
lblDireccionCliente = new javax.swing.JLabel();
btnNuevo = new javax.swing.JButton();
btnEditar = new javax.swing.JButton();
btnEliminar = new javax.swing.JButton();
jfNuevoCliente.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
jfNuevoCliente.setResizable(false);
jfNuevoCliente.setSize(new java.awt.Dimension(262, 185));
lblVNCTitulo.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
lblVNCTitulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lblVNCTitulo.setText("Nuevo Cliente");
lblVNCNombre.setFont(new java.awt.Font("Noto Sans", 1, 12)); // NOI18N
lblVNCNombre.setText("Nombre:");
lblVNCDireccion.setFont(new java.awt.Font("Noto Sans", 1, 12)); // NOI18N
lblVNCDireccion.setText("Direccion:");
btnVNCAceptar.setText("Aceptar");
btnVNCAceptar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnVNCAceptarActionPerformed(evt);
}
});
btnVNCCancelar.setText("Cancelar");
btnVNCCancelar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnVNCCancelarActionPerformed(evt);
}
});
javax.swing.GroupLayout jpVNCLayout = new javax.swing.GroupLayout(jpVNC);
jpVNC.setLayout(jpVNCLayout);
jpVNCLayout.setHorizontalGroup(
jpVNCLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jpVNCLayout.createSequentialGroup()
.addGroup(jpVNCLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblVNCNombre)
.addComponent(lblVNCDireccion))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jpVNCLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtVNCNombre)
.addComponent(txtVNCDireccion)))
.addGroup(jpVNCLayout.createSequentialGroup()
.addGap(41, 41, 41)
.addComponent(btnVNCAceptar)
.addGap(18, 18, 18)
.addComponent(btnVNCCancelar)
.addContainerGap(61, Short.MAX_VALUE))
);
jpVNCLayout.setVerticalGroup(
jpVNCLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jpVNCLayout.createSequentialGroup()
.addGroup(jpVNCLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblVNCNombre)
.addComponent(txtVNCNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jpVNCLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblVNCDireccion)
.addComponent(txtVNCDireccion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jpVNCLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnVNCAceptar)
.addComponent(btnVNCCancelar))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout jfNuevoClienteLayout = new javax.swing.GroupLayout(jfNuevoCliente.getContentPane());
jfNuevoCliente.getContentPane().setLayout(jfNuevoClienteLayout);
jfNuevoClienteLayout.setHorizontalGroup(
jfNuevoClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jfNuevoClienteLayout.createSequentialGroup()
.addContainerGap()
.addGroup(jfNuevoClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jpVNC, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(lblVNCTitulo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
jfNuevoClienteLayout.setVerticalGroup(
jfNuevoClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jfNuevoClienteLayout.createSequentialGroup()
.addContainerGap()
.addComponent(lblVNCTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jpVNC, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
jfEditarCliente.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
jfEditarCliente.setResizable(false);
jfEditarCliente.setSize(new java.awt.Dimension(262, 214));
lblVECTitulo.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
lblVECTitulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lblVECTitulo.setText("Editar Cliente");
lblVECId.setFont(new java.awt.Font("Noto Sans", 1, 12)); // NOI18N
lblVECId.setText("ID:");
lblVECIdCliente.setText(" ");
lblVECNombre.setFont(new java.awt.Font("Noto Sans", 1, 12)); // NOI18N
lblVECNombre.setText("Nombre:");
lblVECDireccion.setFont(new java.awt.Font("Noto Sans", 1, 12)); // NOI18N
lblVECDireccion.setText("Direccion:");
btnVECAceptar.setText("Aceptar");
btnVECAceptar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnVECAceptarActionPerformed(evt);
}
});
btnVECCancelar.setText("Cancelar");
btnVECCancelar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnVECCancelarActionPerformed(evt);
}
});
javax.swing.GroupLayout jpVECLayout = new javax.swing.GroupLayout(jpVEC);
jpVEC.setLayout(jpVECLayout);
jpVECLayout.setHorizontalGroup(
jpVECLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jpVECLayout.createSequentialGroup()
.addGap(41, 41, 41)
.addComponent(btnVECAceptar)
.addGap(18, 18, 18)
.addComponent(btnVECCancelar)
.addContainerGap(61, Short.MAX_VALUE))
.addGroup(jpVECLayout.createSequentialGroup()
.addGroup(jpVECLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblVECDireccion)
.addComponent(lblVECNombre)
.addComponent(lblVECId))
.addGap(6, 6, 6)
.addGroup(jpVECLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jpVECLayout.createSequentialGroup()
.addComponent(lblVECIdCliente)
.addGap(0, 0, Short.MAX_VALUE))
.addComponent(txtVECNombre)
.addComponent(txtVECDireccion)))
);
jpVECLayout.setVerticalGroup(
jpVECLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jpVECLayout.createSequentialGroup()
.addGroup(jpVECLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblVECId)
.addComponent(lblVECIdCliente))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jpVECLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblVECNombre)
.addComponent(txtVECNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jpVECLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblVECDireccion)
.addComponent(txtVECDireccion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jpVECLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnVECAceptar)
.addComponent(btnVECCancelar))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout jfEditarClienteLayout = new javax.swing.GroupLayout(jfEditarCliente.getContentPane());
jfEditarCliente.getContentPane().setLayout(jfEditarClienteLayout);
jfEditarClienteLayout.setHorizontalGroup(
jfEditarClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jfEditarClienteLayout.createSequentialGroup()
.addContainerGap()
.addGroup(jfEditarClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jpVEC, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(lblVECTitulo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
jfEditarClienteLayout.setVerticalGroup(
jfEditarClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jfEditarClienteLayout.createSequentialGroup()
.addContainerGap()
.addComponent(lblVECTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jpVEC, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosed(java.awt.event.WindowEvent evt) {
formWindowClosed(evt);
}
});
lblTitulo.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
lblTitulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lblTitulo.setText("Gestor de clientes");
btnPrimero.setText("|<");
btnPrimero.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnPrimeroActionPerformed(evt);
}
});
btnAnterior.setText("<<");
btnAnterior.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAnteriorActionPerformed(evt);
}
});
btnSiguiente.setText(">>");
btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSiguienteActionPerformed(evt);
}
});
btnUltimo.setText(">|");
btnUltimo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnUltimoActionPerformed(evt);
}
});
lblId.setFont(new java.awt.Font("Noto Sans", 1, 12)); // NOI18N
lblId.setText("ID:");
lblIdCliente.setText(" ");
lblNombre.setFont(new java.awt.Font("Noto Sans", 1, 12)); // NOI18N
lblNombre.setText("Nombre:");
lblNombreCliente.setText(" ");
lblDireccion.setFont(new java.awt.Font("Noto Sans", 1, 12)); // NOI18N
lblDireccion.setText("Dirección:");
lblDireccionCliente.setText(" ");
btnNuevo.setText("NUEVO");
btnNuevo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnNuevoActionPerformed(evt);
}
});
btnEditar.setText("EDITAR");
btnEditar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnEditarActionPerformed(evt);
}
});
btnEliminar.setText("ELIMINAR");
btnEliminar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnEliminarActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanelVPLayout = new javax.swing.GroupLayout(jPanelVP);
jPanelVP.setLayout(jPanelVPLayout);
jPanelVPLayout.setHorizontalGroup(
jPanelVPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblTitulo, javax.swing.GroupLayout.DEFAULT_SIZE, 519, Short.MAX_VALUE)
.addGroup(jPanelVPLayout.createSequentialGroup()
.addGap(24, 24, 24)
.addGroup(jPanelVPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelVPLayout.createSequentialGroup()
.addGroup(jPanelVPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelVPLayout.createSequentialGroup()
.addComponent(lblNombre)
.addGap(18, 18, 18)
.addGroup(jPanelVPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblIdCliente)
.addComponent(lblNombreCliente)))
.addGroup(jPanelVPLayout.createSequentialGroup()
.addComponent(lblDireccion)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(lblDireccionCliente)))
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(jPanelVPLayout.createSequentialGroup()
.addComponent(lblId)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
.addGroup(jPanelVPLayout.createSequentialGroup()
.addContainerGap()
.addComponent(btnPrimero, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnAnterior, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnSiguiente, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnUltimo, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(50, 50, 50)
.addComponent(btnNuevo)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnEditar)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnEliminar)
.addGap(0, 0, Short.MAX_VALUE))
);
jPanelVPLayout.setVerticalGroup(
jPanelVPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelVPLayout.createSequentialGroup()
.addComponent(lblTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanelVPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnPrimero)
.addComponent(btnAnterior)
.addComponent(btnSiguiente)
.addComponent(btnUltimo)
.addComponent(btnNuevo)
.addComponent(btnEditar)
.addComponent(btnEliminar))
.addGap(24, 24, 24)
.addGroup(jPanelVPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblId)
.addComponent(lblIdCliente))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanelVPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblNombre)
.addComponent(lblNombreCliente))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanelVPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblDireccion)
.addComponent(lblDireccionCliente))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanelVP, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanelVP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed
// Cerramos el ResultSet de clientes
try {
rsClientes.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
// Cerramos la conexión a la base de datos
DBManager.close();
}//GEN-LAST:event_formWindowClosed
private void btnPrimeroActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPrimeroActionPerformed
muestraClientePrimero();
}//GEN-LAST:event_btnPrimeroActionPerformed
private void btnAnteriorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAnteriorActionPerformed
muestraClienteAnterior();
}//GEN-LAST:event_btnAnteriorActionPerformed
private void btnSiguienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSiguienteActionPerformed
muestraClienteSiguiente();
}//GEN-LAST:event_btnSiguienteActionPerformed
private void btnUltimoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnUltimoActionPerformed
muestraClienteUltimo();
}//GEN-LAST:event_btnUltimoActionPerformed
// Pide los clientes a la base de datos y los guarda en ResultSet rsClientes
private void obtenerClientes() {
try {
// Cerramos el ResultSet actual
if (rsClientes != null) {
rsClientes.close();
}
// Pedimos la tabla clientes a la base de datos
rsClientes = DBManager.getTablaClientes(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
// Movemos cursor al primero
clienteValido = rsClientes.first();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
private void muestraClientePrimero() {
try {
clienteValido = rsClientes.first();
muestraDatosCliente();
} catch (SQLException ex) {
muestraVentanaErrorSQL(ex);
} catch (Exception ex) {
muestraVentanaError(ex);
}
}
private void muestraClienteAnterior() {
try {
if (!rsClientes.isFirst()) {
clienteValido = rsClientes.previous();
muestraDatosCliente();
}
} catch (SQLException ex) {
muestraVentanaErrorSQL(ex);
} catch (Exception ex) {
muestraVentanaError(ex);
}
}
private void muestraClienteSiguiente() {
try {
if (!rsClientes.isLast()) {
clienteValido = rsClientes.next();
muestraDatosCliente();
}
} catch (SQLException ex) {
muestraVentanaErrorSQL(ex);
} catch (Exception ex) {
muestraVentanaError(ex);
}
}
private void muestraClienteUltimo() {
try {
clienteValido = rsClientes.last();
muestraDatosCliente();
} catch (SQLException ex) {
muestraVentanaErrorSQL(ex);
} catch (Exception ex) {
muestraVentanaError(ex);
}
}
// Muestra en los componentes los datos del cliente al que apunta el cursor de rsclientes
private void muestraDatosCliente() {
int id = 0;
String nombre = "";
String direccion = "";
// Obtenemos los datos del cliente actual (si es válido)
if (clienteValido) {
try {
id = rsClientes.getInt("id");
nombre = rsClientes.getString("nombre");
direccion = rsClientes.getString("direccion");
} catch (SQLException ex) {
muestraVentanaError(ex);
}
}
// Mostramos datos en la ventana
lblIdCliente.setText("" + id);
lblNombreCliente.setText(nombre);
lblDireccionCliente.setText(direccion);
}
private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarActionPerformed
if (!clienteValido) {
muestraVentanaAviso("No se puede editar el cliente.\n¿Es posible que no haya clientes?");
} else {
try {
// Obtenemos los datos del cliente actual
int id = rsClientes.getInt("id");
lblVECIdCliente.setText("" + id);
String nombre = rsClientes.getString("nombre");
txtVECNombre.setText(nombre);
String direccion = rsClientes.getString("direccion");
txtVECDireccion.setText(direccion);
// Ocultamos ventana principal
this.setVisible(false);
// Mostramos ventana de editar cliente
jfEditarCliente.setVisible(true);
} catch (SQLException ex) {
muestraVentanaError(ex);
}
}
}//GEN-LAST:event_btnEditarActionPerformed
private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
if (!clienteValido) {
muestraVentanaAviso("No se puede eliminar el cliente.\n¿Es posible que no haya clientes?");
} else {
// Ventana para que el usuario confirme
boolean aceptado = muestraVentanaAceptarCancelar("¿Está seguro de que desea eliminar el cliente?");
// Si respondió que sí, eliminamos el cliente y actualizamos datos
if (aceptado) {
try {
// Eliminamos el cliente actual
int id = Integer.parseInt(lblIdCliente.getText());
DBManager.deleteCliente(id);
// Actualizamos datos de clientes
obtenerClientes();
muestraDatosCliente();
} catch (Exception ex) {
muestraVentanaError(ex);
}
}
}
}//GEN-LAST:event_btnEliminarActionPerformed
private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNuevoActionPerformed
// Ocultamos ventana principal
this.setVisible(false);
// Mostramos ventana de nuevo cliente con campos vacíos
txtVNCNombre.setText("");
txtVNCDireccion.setText("");
jfNuevoCliente.setVisible(true);
}//GEN-LAST:event_btnNuevoActionPerformed
private void btnVNCAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVNCAceptarActionPerformed
// Registramos nuevo cliente en la base de datos
String nombre = txtVNCNombre.getText();
String direccion = txtVNCDireccion.getText();
DBManager.insertCliente(nombre, direccion);
// Ocultamos ventana de nuevo cliente y mostramos ventana principal
jfNuevoCliente.setVisible(false);
this.setVisible(true);
// Actualizamos datos y mostramos el último
obtenerClientes();
muestraClienteUltimo();
}//GEN-LAST:event_btnVNCAceptarActionPerformed
private void btnVNCCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVNCCancelarActionPerformed
jfNuevoCliente.setVisible(false);
this.setVisible(true);
}//GEN-LAST:event_btnVNCCancelarActionPerformed
private void btnVECAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVECAceptarActionPerformed
// Registramos nuevo cliente en la base de datos
int id = Integer.parseInt(lblVECIdCliente.getText());
String nombre = txtVECNombre.getText();
String direccion = txtVECDireccion.getText();
DBManager.updateCliente(id, nombre, direccion);
// Ocultamos ventana de nuevo cliente y mostramos ventana principal
jfEditarCliente.setVisible(false);
this.setVisible(true);
// Actualizamos datos y mostramos el último
obtenerClientes();
muestraClientePrimero();
}//GEN-LAST:event_btnVECAceptarActionPerformed
private void btnVECCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVECCancelarActionPerformed
jfEditarCliente.setVisible(false);
this.setVisible(true);
}//GEN-LAST:event_btnVECCancelarActionPerformed
// Muestra una ventana de error tipo SQLException
private void muestraVentanaErrorSQL(SQLException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(this, "Error SQL:\n" + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
// Muestra una ventana de error tipo Exception
private void muestraVentanaError(Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(this, "Error inesperado:\n" + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
// Muestra una ventana de aviso con el mensaje indicado
private void muestraVentanaAviso(String mensaje) {
JOptionPane.showMessageDialog(this, mensaje, "Aviso", JOptionPane.WARNING_MESSAGE);
}
// Muestra una ventana de aceptar/cancelar y devuelve true si le dió a aceptar
private boolean muestraVentanaAceptarCancelar(String mensaje) {
int result = JOptionPane.showConfirmDialog(this, mensaje, "Confirme la acción", JOptionPane.OK_CANCEL_OPTION);
return (result == 0);
}
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(GestionClientesIGU.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(GestionClientesIGU.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(GestionClientesIGU.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(GestionClientesIGU.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
//</editor-fold>
//</editor-fold>
//</editor-fold>
//</editor-fold>
//</editor-fold>
//</editor-fold>
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new GestionClientesIGU().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnAnterior;
private javax.swing.JButton btnEditar;
private javax.swing.JButton btnEliminar;
private javax.swing.JButton btnNuevo;
private javax.swing.JButton btnPrimero;
private javax.swing.JButton btnSiguiente;
private javax.swing.JButton btnUltimo;
private javax.swing.JButton btnVECAceptar;
private javax.swing.JButton btnVECCancelar;
private javax.swing.JButton btnVNCAceptar;
private javax.swing.JButton btnVNCCancelar;
private javax.swing.JPanel jPanelVP;
private javax.swing.JFrame jfEditarCliente;
private javax.swing.JFrame jfNuevoCliente;
private javax.swing.JPanel jpVEC;
private javax.swing.JPanel jpVNC;
private javax.swing.JLabel lblDireccion;
private javax.swing.JLabel lblDireccionCliente;
private javax.swing.JLabel lblId;
private javax.swing.JLabel lblIdCliente;
private javax.swing.JLabel lblNombre;
private javax.swing.JLabel lblNombreCliente;
private javax.swing.JLabel lblTitulo;
private javax.swing.JLabel lblVECDireccion;
private javax.swing.JLabel lblVECId;
private javax.swing.JLabel lblVECIdCliente;
private javax.swing.JLabel lblVECNombre;
private javax.swing.JLabel lblVECTitulo;
private javax.swing.JLabel lblVNCDireccion;
private javax.swing.JLabel lblVNCNombre;
private javax.swing.JLabel lblVNCTitulo;
private javax.swing.JTextField txtVECDireccion;
private javax.swing.JTextField txtVECNombre;
private javax.swing.JTextField txtVNCDireccion;
private javax.swing.JTextField txtVNCNombre;
// End of variables declaration//GEN-END:variables
}

View File

@@ -0,0 +1,74 @@
-- phpMyAdmin SQL Dump
-- version 5.0.2
-- https://www.phpmyadmin.net/
--
-- Servidor: localhost
-- Tiempo de generación: 30-04-2020 a las 10:39:43
-- Versión del servidor: 10.4.11-MariaDB
-- Versión de PHP: 7.4.4
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Base de datos: `tienda`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `clientes`
--
CREATE TABLE `clientes` (
`id` int(11) NOT NULL,
`nombre` varchar(50) NOT NULL,
`direccion` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Volcado de datos para la tabla `clientes`
--
INSERT INTO `clientes` (`id`, `nombre`, `direccion`) VALUES
(1, 'Lionel', 'Valencia'),
(2, 'Sergi', 'Valencia'),
(3, 'Alfredo', 'Valencia'),
(4, 'Paco', 'Valencia'),
(5, 'Maria', 'Castellón'),
(6, 'Pepito', 'Alicante'),
(7, 'Luis', 'Elx'),
(8, 'Antonia', 'Xàtiva'),
(9, 'Carmen', 'Paterna');
--
-- Índices para tablas volcadas
--
--
-- Indices de la tabla `clientes`
--
ALTER TABLE `clientes`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT de las tablas volcadas
--
--
-- AUTO_INCREMENT de la tabla `clientes`
--
ALTER TABLE `clientes`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

@@ -0,0 +1,35 @@
package iesthiar.gestorClientesDAO;
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class App extends Application {
private static Scene scene;
@Override
public void start(Stage stage) throws IOException {
scene = new Scene(loadFXML("gestorClientes"), 640, 480);
stage.setScene(scene);
stage.show();
}
static void setRoot(String fxml) throws IOException {
scene.setRoot(loadFXML(fxml));
}
private static Parent loadFXML(String fxml) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(App.class.getResource(fxml + ".fxml"));
return fxmlLoader.load();
}
public static void main(String[] args) {
launch();
}
}

View File

@@ -0,0 +1,50 @@
package iesthiar.gestorClientesDAO;
import java.io.Serializable;
public class Cliente implements Serializable {
private static final long serialVersionUID=1L;
long id;
String nombre;
String direccion;
public Cliente(long id, String nombre, String direccion) {
this.id = id;
this.nombre = nombre;
this.direccion = direccion;
}
// Junto con getters/setters
public Cliente(String nombre,String direccion){
this(0,nombre,direccion);
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
@Override
public String toString() {
return nombre;
}
}

View File

@@ -0,0 +1,176 @@
package iesthiar.gestorClientesDAO;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
public class ClienteDaoMysql implements Dao<Cliente> {
// Un DataSource es un intermediario para obtener las conexiones con la base de
// datos
private DataSource dataSource;
private static ClienteDaoMysql clienteDaoMysql=null;
// El constructor es privado para que no se puedan crear objetos de esta clase.
// Así se implementa el patrón singleton
private ClienteDaoMysql() {
// Configurar el BasicDataSource con los datos de la base de datos
String servidor, baseDatos, usuario, clave;
Properties datos = new Properties();
try (InputStream inputStream = new FileInputStream("db_config.properties")) {
datos.load(inputStream);
servidor = datos.getProperty("db.servidor");
baseDatos = datos.getProperty("db.baseDatos");
usuario = datos.getProperty("db.usuario");
clave = datos.getProperty("db.clave");
} catch (IOException | NullPointerException e) {
// Establecemos unos valores por defecto
servidor = "172.18.185.243";
baseDatos = "tienda";
usuario = "root";
clave = "example";
// Crear fichero de properties
crearFicheroProperties();
System.out.println("El fichero de configuración no existe");
}
// Creamos la fuente de datos
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setUrl("jdbc:mysql://" + servidor + ":3306/" + baseDatos);
basicDataSource.setUsername(usuario);
basicDataSource.setPassword(clave);
this.dataSource = basicDataSource;
}
// Implementación del patrón Singleton. Usamos un método para obtener objetos de la clase.
// Si no existe el objeto, lo creamos, y siempre devolvemos el mismo objeto. Sólo tenemos una instancia de este objeto
public static ClienteDaoMysql getClienteDaoMysql(){
if (clienteDaoMysql==null)
clienteDaoMysql=new ClienteDaoMysql();
return clienteDaoMysql;
}
private void crearFicheroProperties() {
Properties datos = new Properties();
datos.setProperty("db.servidor", "localhost");
datos.setProperty("db.puerto", "3306");
datos.setProperty("db.baseDatos", "geografia");
datos.setProperty("db.usuario", "root");
datos.setProperty("db.clave", "");
try {
datos.store(new FileOutputStream("db_config.properties"), "Configuración inicial BD");
} catch (IOException e) {
System.out.println("ERROR al escribir el fichero de properties");
}
}
@Override
public Optional<Cliente> obtener(long id) {
try (Connection conn = dataSource.getConnection();
PreparedStatement stmt = conn.prepareStatement("SELECT nombre, direccion FROM clientes WHERE id = ?")) {
stmt.setLong(1, id);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
String nombre = rs.getString("nombre");
String direccion = rs.getString("direccion");
Cliente cliente = new Cliente(id, nombre, direccion);
return Optional.of(cliente);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return Optional.empty();
}
@Override
public List<Cliente> obtenerTodos() {
List<Cliente> clientes = new ArrayList<>();
try (Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT id, nombre, direccion FROM clientes")) {
while (rs.next()) {
long id = rs.getLong("id");
String nombre = rs.getString("nombre");
String direccion = rs.getString("direccion");
Cliente cliente = new Cliente(id, nombre, direccion);
clientes.add(cliente);
}
} catch (SQLException e) {
e.printStackTrace();
}
return clientes;
}
@Override
public void guardar(Cliente cliente) {
try (Connection conn = dataSource.getConnection();
PreparedStatement pst = conn.prepareStatement("insert into clientes(nombre,direccion) values (?,?)")) {
pst.setString(1, cliente.getNombre());
pst.setString(2, cliente.getDireccion());
pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void actualizar(Cliente cliente) {
try (Connection conn = dataSource.getConnection();
PreparedStatement pst = conn.prepareStatement("update clientes set nombre=?, direccion=? where id=?")) {
pst.setString(1, cliente.getNombre());
pst.setString(2, cliente.getDireccion());
pst.setLong(3, cliente.getId());
pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void borrar(Cliente cliente) {
try (Connection conn = dataSource.getConnection();
PreparedStatement pst = conn.prepareStatement("delete from clientes where id=?")) {
pst.setLong(1, cliente.getId());
pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public boolean activa() {
try (Connection conn = dataSource.getConnection()) {
return true;
} catch (SQLException e) {
return false;
}
}
}

View File

@@ -0,0 +1,47 @@
package iesthiar.gestorClientesDAO;
import java.util.List;
import java.util.Map;
import java.util.Optional;
public class ClienteDaoSerilizable implements Dao<Cliente>{
private Map<Long,Cliente> clientes;
public ClienteDaoSerilizable(){
// Leer objetos del fichero serializado.
// Fichero se guarda en resources
// Donde dejo los objetos?
}
@Override
public Optional<Cliente> obtener(long id) {
return Optional.empty();
}
@Override
public List<Cliente> obtenerTodos() {
return null;
}
@Override
public void guardar(Cliente cliente) {
}
@Override
public void actualizar(Cliente cliente) {
}
@Override
public void borrar(Cliente cliente) {
}
@Override
public boolean activa() {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'activa'");
}
}

View File

@@ -0,0 +1,13 @@
package iesthiar.gestorClientesDAO;
import java.util.List;
import java.util.Optional;
public interface Dao <T>{
Optional<T> obtener(long id);
List<T> obtenerTodos();
void guardar(T t);
void actualizar(T t);
void borrar(T t);
boolean activa();
}

View File

@@ -0,0 +1,122 @@
package iesthiar.gestorClientesDAO;
import java.net.URL;
import java.util.Optional;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
public class gestorClientesControlador implements Initializable {
@FXML
private ComboBox<Cliente> clientesCBox;
@FXML
private TextField idTF;
@FXML
private TextField nombreTF;
@FXML
private TextField direccionTF;
@FXML
private Label mensajes;
@FXML
private Button modificarButton;
@FXML
private Button borrarButton;
private Dao<Cliente> dao;
private Cliente clienteSeleccionado;
@Override
public void initialize(URL location, ResourceBundle resources) {
dao = ClienteDaoMysql.getClienteDaoMysql();
if (!dao.activa()) {
Alert alerta = new Alert(AlertType.ERROR);
alerta.setHeaderText("ERROR GRAVE");
alerta.setContentText("Se ha producido un error al abrir la base de datos");
alerta.showAndWait();
System.exit(1);
}
clientesCBox.getItems().setAll(dao.obtenerTodos());
}
@FXML
public void accionCB(ActionEvent ae) {
clienteSeleccionado = (Cliente) ((ComboBox<Cliente>) ae.getSource()).getValue();
idTF.setText("" + clienteSeleccionado.id);
nombreTF.setText(clienteSeleccionado.nombre);
direccionTF.setText(clienteSeleccionado.direccion);
mensajes.setText("");
}
@FXML
public void nuevoCliente(ActionEvent ae) {
Button fuente=(Button)ae.getSource();
if (fuente.getText().equals("Nuevo")){
// Preparamos para crear un nuevo cliente
fuente.setText("Crear");
modificarButton.setDisable(true);
borrarButton.setDisable(true);
clientesCBox.setDisable(true);
idTF.setText("");
direccionTF.setText("");
nombreTF.setText("");
idTF.setEditable(true);
idTF.requestFocus();
} else {
// Dar de alta realmente
if (idTF.getText().matches("^[0-9]+$") && !nombreTF.getText().equals("") && !direccionTF.getText().equals("")){
Cliente nuevoCliente=new Cliente(Long.parseLong(idTF.getText()),nombreTF.getText(), direccionTF.getText());
dao.guardar(nuevoCliente);
mensajes.setText("Cliente creado correctamente");
modificarButton.setDisable(false);
borrarButton.setDisable(false);
clientesCBox.setDisable(false);
fuente.setText("Nuevo");
direccionTF.setText("");
nombreTF.setText("");
idTF.setEditable(false);
clientesCBox.getItems().add(nuevoCliente);
}
}
}
@FXML
public void modificar() {
if (clienteSeleccionado != null) {
clienteSeleccionado.setDireccion(direccionTF.getText());
clienteSeleccionado.setNombre(nombreTF.getText());
dao.actualizar(clienteSeleccionado);
mensajes.setText("Cliente modificado correctamente");
}
}
@FXML
public void borrarCliente() {
if (clienteSeleccionado != null && confirmacion("¿Borrar el cliente seleccionado?")) {
dao.borrar(clienteSeleccionado);
clientesCBox.getItems().remove(clienteSeleccionado);
mensajes.setText("Cliente borrado correctamente");
}
}
private boolean confirmacion(String mensaje) {
Alert alerta = new Alert(AlertType.CONFIRMATION);
alerta.setHeaderText("Se necesita confirmación");
alerta.setContentText(mensaje);
Optional<ButtonType> res = alerta.showAndWait();
if (res.get() == ButtonType.OK)
return true;
else
return false;
}
}

View File

@@ -1,7 +1,15 @@
module iesthiar {
requires javafx.controls;
requires javafx.fxml;
requires java.sql;
requires java.desktop;
requires javafx.graphics;
requires org.apache.commons.dbcp2;
opens iesthiar to javafx.fxml;
exports iesthiar;
opens iesthiar.gestorClientesDAO to javafx.fxml;
exports iesthiar.gestorClientesDAO;
}

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefWidth="600.0" xmlns="http://javafx.com/javafx/22" xmlns:fx="http://javafx.com/fxml/1" fx:controller="iesthiar.gestorClientesDAO.gestorClientesControlador">
<children>
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="10.0">
<children>
<Label text="Clientes" />
<ComboBox fx:id="clientesCBox" onAction="#accionCB" prefWidth="150.0" />
</children>
</HBox>
<GridPane hgap="10.0">
<columnConstraints>
<ColumnConstraints halignment="RIGHT" hgrow="SOMETIMES" maxWidth="293.0" minWidth="10.0" prefWidth="208.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="405.0" minWidth="10.0" prefWidth="405.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="392.0" minWidth="10.0" prefWidth="105.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="Id:" />
<Label text="Nombre:" GridPane.rowIndex="1" />
<Label text="Dirección:" GridPane.rowIndex="2" />
<TextField fx:id="idTF" editable="false" prefHeight="26.0" prefWidth="337.0" GridPane.columnIndex="1" />
<TextField fx:id="nombreTF" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<TextField fx:id="direccionTF" GridPane.columnIndex="1" GridPane.rowIndex="2" />
</children>
</GridPane>
<HBox>
<children>
<ButtonBar nodeOrientation="LEFT_TO_RIGHT" prefHeight="40.0" prefWidth="200.0">
<buttons>
<Button mnemonicParsing="false" onAction="#nuevoCliente" text="Nuevo" />
</buttons>
</ButtonBar>
<ButtonBar prefHeight="40.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
<buttons>
<Button fx:id="modificarButton" mnemonicParsing="false" onAction="#modificar" text="Modificar" />
<Button fx:id="borrarButton" mnemonicParsing="false" onAction="#borrarCliente" text="Borrar" />
</buttons>
<HBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</HBox.margin>
</ButtonBar>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0">
<children>
<Label fx:id="mensajes" text="Mensajes" />
</children>
</HBox>
</children>
</VBox>

View File

@@ -0,0 +1,74 @@
-- phpMyAdmin SQL Dump
-- version 5.0.2
-- https://www.phpmyadmin.net/
--
-- Servidor: localhost
-- Tiempo de generación: 30-04-2020 a las 10:39:43
-- Versión del servidor: 10.4.11-MariaDB
-- Versión de PHP: 7.4.4
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Base de datos: `tienda`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `clientes`
--
CREATE TABLE `clientes` (
`id` int(11) NOT NULL,
`nombre` varchar(50) NOT NULL,
`direccion` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Volcado de datos para la tabla `clientes`
--
INSERT INTO `clientes` (`id`, `nombre`, `direccion`) VALUES
(1, 'Lionel', 'Valencia'),
(2, 'Sergi', 'Valencia'),
(3, 'Alfredo', 'Valencia'),
(4, 'Paco', 'Valencia'),
(5, 'Maria', 'Castellón'),
(6, 'Pepito', 'Alicante'),
(7, 'Luis', 'Elx'),
(8, 'Antonia', 'Xàtiva'),
(9, 'Carmen', 'Paterna');
--
-- Índices para tablas volcadas
--
--
-- Indices de la tabla `clientes`
--
ALTER TABLE `clientes`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT de las tablas volcadas
--
--
-- AUTO_INCREMENT de la tabla `clientes`
--
ALTER TABLE `clientes`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/22" xmlns:fx="http://javafx.com/fxml/1" fx:controller="iesthiar.PreparadasController">
<children>
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="10.0">
<children>
<Label text="Nombre a buscar:" />
<TextField fx:id="nombre" />
<Button mnemonicParsing="false" onAction="#conectar" text="Buscar" />
</children>
</HBox>
<TextArea fx:id="salida" editable="false" prefHeight="200.0" prefWidth="400.0" style="-fx-control-inner-background:#000000; -fx-font-family: Consolas; -fx-highlight-fill: #00ff00; -fx-highlight-text-fill: #000000; -fx-text-fill: #00ff00; " />
</children>
</VBox>

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Button?>
<?import javafx.geometry.Insets?>
<VBox alignment="CENTER" spacing="20.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="iesthiar.PrimaryController">
<children>
<Label text="Primary View" />
<Button fx:id="primaryButton" text="Switch to Secondary View" onAction="#switchToSecondary"/>
</children>
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
</padding>
</VBox>

View File

@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<TabPane xmlns="http://javafx.com/javafx/21.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="iesthiar.PruebaConexionController">
<tabs>
<Tab text="PruebaConexion">
<content>
<VBox alignment="CENTER" spacing="20.0">
<children>
<Label text="Prueba de conexion" />
<TextArea fx:id="salida" editable="false" prefHeight="200.0" prefWidth="400.0" style="-fx-control-inner-background:#000000; -fx-font-family: Consolas; -fx-highlight-fill: #00ff00; -fx-highlight-text-fill: #000000; -fx-text-fill: #00ff00; " />
<Button onAction="#conectar" text="Conectar" />
</children>
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
</padding>
</VBox>
</content>
</Tab>
<Tab text="ObtenerResultados">
<content>
<VBox alignment="CENTER" spacing="20.0">
<children>
<HBox>
<children>
<Label prefWidth="80.0" text="Servidor" />
<TextField fx:id="servidor" promptText="localhost" />
<Label text="Puerto" />
<TextField fx:id="puerto" prefWidth="60.0" promptText="3306" />
</children>
</HBox>
<HBox>
<children>
<Label prefWidth="100.0" text="Base de Datos" />
<TextField fx:id="baseDatos" />
</children>
</HBox>
<HBox>
<children>
<Label prefWidth="80.0" text="Usuario" />
<TextField fx:id="usuario" />
</children>
</HBox>
<TextArea fx:id="salidaRes" editable="false" prefHeight="200.0" prefWidth="400.0" style="-fx-control-inner-background:#000000; -fx-font-family: Consolas; -fx-highlight-fill: #00ff00; -fx-highlight-text-fill: #000000; -fx-text-fill: #00ff00; " />
<Button onAction="#conectarRes" text="Conectar" />
</children>
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
</padding>
</VBox>
</content>
</Tab>
<Tab text="ResultadosParciales">
<content>
<VBox alignment="CENTER" spacing="20.0">
<children>
<HBox spacing="10.0">
<children>
<Label text="Nombre a buscar" />
<TextField fx:id="nombre" />
</children>
</HBox>
<TextArea fx:id="salidaRes3" editable="false" prefHeight="200.0" prefWidth="400.0" style="-fx-control-inner-background:#000000; -fx-font-family: Consolas; -fx-highlight-fill: #00ff00; -fx-highlight-text-fill: #000000; -fx-text-fill: #00ff00; " />
<Button onAction="#conectarRes3" text="Conectar" />
</children>
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
</padding>
</VBox>
</content>
</Tab>
</tabs>
</TabPane>

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Button?>
<?import javafx.geometry.Insets?>
<VBox alignment="CENTER" spacing="20.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="iesthiar.SecondaryController">
<children>
<Label text="Secondary View" />
<Button fx:id="secondaryButton" text="Switch to Primary View" onAction="#switchToPrimary" />
</children>
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
</padding>
</VBox>