03 abril, 2021

JAVA - Agenda de Personas

El siguiente ejercicio nos manda Jéssica Castillo. Nos pide diseñar un programa en java que permita cargar la información de una tabla de base de datos en un JTable y que para ello debemos usar vectores, Asimismo, nos pide implementar las opciones para insertar y eliminar.

MYSQL

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

DROP SCHEMA IF EXISTS `parcial` ;
CREATE SCHEMA IF NOT EXISTS `parcial` DEFAULT CHARACTER SET latin1 COLLATE latin1_spanish_ci ;
USE `parcial` ;

-- -----------------------------------------------------
-- Table `parcial`.`agenda`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `parcial`.`agenda` (
  `id` CHAR(5) NOT NULL ,
  `nombre` VARCHAR(45) NULL ,
  `direccion` VARCHAR(45) NULL ,
  `telefono` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

JAVA

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

public class Agenda extends JFrame implements ActionListener {

	// Atributos para la creación de la GUI
	private JButton btnAgregar, btnEliminar, btnSalir;
	private JTextField txtId, txtNombre, txtDireccion, txtTelefono;
	private DefaultTableModel modelo;
	// Atributo para la conexión a la base de datos
	private Connection con;

	// Constructor de la clase
	public Agenda() {
		// Al llamar al constructor de la clase creamos la GUI y/o cargamos la
		// información

		// --->INICIA LA CREACIÓN DE LA GUI

		/* Ventana principal */
		super("Agenda de Personas"); // Título
		setSize(330, 450); // Tamaño

		/* Panel de datos */
		JPanel pnlDatos = new JPanel(); // Crea el panel
		Dimension dimension = new Dimension(300, 150); // Configura una dimensión
		pnlDatos.setPreferredSize(dimension); // Establece el tamaño
		pnlDatos.setLayout(new GridLayout(6, 2, 1, 1)); // Establece el diseño del panel

		// Campo id
		JLabel lblId = new JLabel("Id");
		pnlDatos.add(lblId);
		
		txtId = new JTextField(10);
		pnlDatos.add(txtId);

		// Campo nombre
		JLabel lblNombre = new JLabel("Nombre");
		pnlDatos.add(lblNombre);
		
		txtNombre = new JTextField(10);
		pnlDatos.add(txtNombre);

		// Campo dirección
		JLabel lblDireccion = new JLabel("Dirección");
		pnlDatos.add(lblDireccion);

		txtDireccion = new JTextField(10);
		pnlDatos.add(txtDireccion);

		// Campo teléfono
		JLabel lblTelefono = new JLabel("Teléfono");
		pnlDatos.add(lblTelefono);

		txtTelefono = new JTextField(10);
		pnlDatos.add(txtTelefono);

		// Botones
		btnAgregar = new JButton("AGREGAR");
		btnAgregar.addActionListener(this);
		pnlDatos.add(btnAgregar);

		btnEliminar = new JButton("ELIMINAR");
		btnEliminar.addActionListener(this);
		pnlDatos.add(btnEliminar);

		btnSalir = new JButton("SALIR");
		btnSalir.addActionListener(this);
		pnlDatos.add(btnSalir);

		/* Panel de resultado */
		JPanel pnlTabla = new JPanel();
		pnlTabla.setPreferredSize(new Dimension(320, 250));

		// Modelo
		modelo = new DefaultTableModel();
		modelo.addColumn("Id");
		modelo.addColumn("Nombre");
		modelo.addColumn("Dirección");
		modelo.addColumn("Teléfono");

		// Tabla
		JTable tabla = new JTable();
		tabla.setModel(modelo);
		tabla.setPreferredScrollableViewportSize(new Dimension(300, 180));

		// Panel de desplazamiento
		JScrollPane scpScroll = new JScrollPane(tabla);
		pnlTabla.add(scpScroll);

		/* Agregamos los paneles a un contenedor principal */
		Container c = getContentPane();
		c.setLayout(new FlowLayout()); // Le damos un diseño al contenedor
		// de alineación centrada y un espacio horizontal
		// y vertical predeterminado de 5 unidades
		c.add(pnlDatos);
		c.add(pnlTabla);
		// <---TERMINA LA CREACIÓN DE LA GUI

		/* Nos conectamos a la base de datos */
		this.generaConexion();

		/* Llenamos la tabla con información */
		this.cargaInformacionTabla();

		//show();
	}

	// Función para establecer la conexión a la base de datos
	public void generaConexion() {
		// Propiedades de conexión a la base de datos
		String url = "jdbc:mysql://localhost/parcial?serverTimezone=UTC&useSSL=false"; // Url de la bd
		String driver = "com.mysql.cj.jdbc.Driver"; // Conector ODBC MySQL
		String name = "root";// Usuario del servidor
		String password = "root"; // Contraseña del servidor

		try {
			// Carga el driver del conexión MySQL
			Class.forName(driver);
			try {
				// Establece la conexión a la base de datos
				con = DriverManager.getConnection(url, name, password);
				System.out.println("Conexión exitosa");
			} catch (Exception e) { // Si hubiera un error al conectarse
				System.out.println("Error al conectarse a la base de datos");
				e.printStackTrace();
			}
		} catch (Exception e) { // Si no se pudo cargar el driver
			System.out.println("Error al cargar el controldor MySQL");
			e.printStackTrace();
		}
	}

	// Función para cargar los datos de la base de datos al JTable
	public void cargaInformacionTabla() {
		int cantFilas = modelo.getRowCount(); // Retorna el número de filas en el modelo
		for (int i = 0; i < cantFilas; i++) {
			modelo.removeRow(0); // Elimina la fila del índice especificado
		}

		Statement stmt;
		ResultSet rs;
		try {
			// Creamos un objeto statement para enviar sentencias sql a la base de datos
			stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
			// Ejecutamos la instrucción SQL dada, que devuelve un único objeto ResultSet
			rs = stmt.executeQuery("SELECT * FROM agenda");
			// Mueve el cursor a la última fila de este objeto ResultSet
			rs.last();
			// Recupera el número de fila actual. Empieza po 1
			int nrow = rs.getRow();
			if (nrow > 0) { // Si el número de fila actual es mayor a 0
				rs.beforeFirst(); // Mueve el cursor al frente de este objeto ResultSet,
									// justo antes de la primera fila.
				while (rs.next()) { // Mientras la llamada al método next() devuelva verdadero
					// Extraemos los valores de las columnas de la fila actual y lo agregamos a un
					// vector temporal
					Vector<String> temporal = new Vector<>();
					temporal.add(rs.getString(1)); // Le podemos pasar el número o el nombre de la columna
					temporal.add(rs.getString(2));
					temporal.add(rs.getString(3));
					temporal.add(rs.getString(4));
					modelo.addRow(temporal); // Agregamos el vetor al modelo
				}
			}
			// Liberar los recursos
			rs.close();
			stmt.close();
		} catch (SQLException e) {
			System.out.println("Erro al ejecutar la consulta");
			e.printStackTrace();
		}
	}

	// Función para insertar un elemento a la base de datos
	public void insertar() {
		Statement stmt;
		try {
			String id1 = txtId.getText();
			String nom1 = txtNombre.getText();
			String dir1 = txtDireccion.getText();
			String tel1 = txtTelefono.getText();
			String query = "INSERT INTO agenda(id, nombre, direccion, telefono) "
					+ "values ('" + id1 + "','" + nom1 + "','" + dir1 + "','" + tel1 + "')";
			System.out.println(query);
			stmt = con.createStatement();
			stmt.executeUpdate(query);
			stmt.close();
		} catch (SQLException sqlex) {
			sqlex.printStackTrace();
		}
	}

	// Función para eliminar un elemento de la base de datos
	public void eliminar() {
		Statement stmt;
		try {
			String id = txtId.getText();
			String query = "DELETE FROM agenda WHERE id='" + id + "'";
			System.out.println(query);
			stmt = con.createStatement();
			stmt.executeUpdate(query);
			stmt.close();
		} catch (SQLException sqlex) {
			sqlex.printStackTrace();
		}
	}

	// Método del ActionListener
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == btnAgregar) {
			this.insertar();
			this.cargaInformacionTabla();
		}
		if (e.getSource() == btnEliminar) {
			this.eliminar();
			this.cargaInformacionTabla();
		}
		if (e.getSource() == btnSalir) {
			try {
				if (con != null)
					con.close();
			} catch (SQLException sqlex) {
				System.err.println("Incapaz de desconectar");
				sqlex.printStackTrace();
			}
			System.exit(0);
		}
	}

	// Método principal que laza la aplicación
	public static void main(String args[]) {
		new Agenda().setVisible(true);
	}

}

PROGRAMA


DESARROLLO TUS ALGORITMOS 🔥🔥


✅ 1. Envía tu algoritmo.
✅ 2. Indica en qué lenguaje de Programación lo deseas.
✅ 3. Para qué fecha lo quieres.
✅ 4. De que país eres (para tu forma de pago)
✅ 5. También se desarrollan al momento.
✅ 6. Los 3 primeros ejercicios son gratis.
🔸 Explico cada ejercicio que desarrollo en el código.


No hay comentarios, ¡cuéntame algo!

Me gustaría saber tu opinión. ¡Saludos!