Tercera Entrega Persistencia y Datos Transaccionales - (Grupo1)
Tercera Entrega Persistencia y Datos Transaccionales - (Grupo1)
Trabajo Colaborativo
Presentado por
2020
1
Tabla de contenidos
1. Introducción.
2. Objetivos
- Objetivo General
- Objetivo Especifico
2
INTRODUCCION
3
OBJETIVOS
OBJETIVO GENERAL
Elaboración del código usando el programa Java a través del IDE Netbeans de Apache de
los siguientes sockets:
OBJETIVOS ESPECIFICOS
4
DESARROLLO DEL PROYECTO
5
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `banco_db` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ;
USE `banco_db` ;
-- -----------------------------------------------------
-- Table `banco_db`.`pais`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `banco_db`.`pais` (
`codigo_pais` INT NOT NULL AUTO_INCREMENT,
`nombre_pais` VARCHAR(45) NOT NULL,
PRIMARY KEY (`codigo_pais`))
ENGINE = InnoDB
AUTO_INCREMENT = 4
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- -----------------------------------------------------
-- Table `banco_db`.`ciudad`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `banco_db`.`ciudad` (
`codigo_ciudad` INT NOT NULL AUTO_INCREMENT,
`nombre_ciudad` VARCHAR(45) NOT NULL,
`codigo_pais` INT NOT NULL,
PRIMARY KEY (`codigo_ciudad`),
CONSTRAINT `fk_codigopais_codigopais`
FOREIGN KEY (`codigo_pais`)
REFERENCES `banco_db`.`pais` (`codigo_pais`))
ENGINE = InnoDB
AUTO_INCREMENT = 3
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
CREATE INDEX `fk_codigopais_codigopais_idx` ON `banco_db`.`ciudad` (`codigo_pais` ASC) VISIBLE;
-- -----------------------------------------------------
-- Table `banco_db`.`cliente`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `banco_db`.`cliente` (
`codigo_cliente` INT NOT NULL AUTO_INCREMENT,
`direccion_cliente` VARCHAR(45) NULL DEFAULT NULL,
`DNI_cliente` VARCHAR(45) NULL DEFAULT NULL,
`nombre_cliente` VARCHAR(45) NOT NULL,
`apellido_cliente` VARCHAR(45) NOT NULL,
`codigo_ciudad` INT NOT NULL,
`telefono_cliente` INT NULL DEFAULT NULL,
PRIMARY KEY (`codigo_cliente`),
CONSTRAINT `fk_codigociudad_codigociudad`
FOREIGN KEY (`codigo_ciudad`)
REFERENCES `banco_db`.`ciudad` (`codigo_ciudad`))
ENGINE = InnoDB
AUTO_INCREMENT = 2
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- -----------------------------------------------------
-- Table `banco_db`.`cuenta`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `banco_db`.`cuenta` (
`numero_cuenta` INT NOT NULL AUTO_INCREMENT,
`saldo_cuenta` INT NULL DEFAULT '0',
`codigo_cliente` INT NOT NULL,
PRIMARY KEY (`numero_cuenta`),
CONSTRAINT `fk_codigocliente_codigocliente`
FOREIGN KEY (`codigo_cliente`)
REFERENCES `banco_db`.`cliente` (`codigo_cliente`))
ENGINE = InnoDB
6
AUTO_INCREMENT = 2
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- -----------------------------------------------------
-- Table `banco_db`.`tipomovimiento`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `banco_db`.`tipomovimiento` (
`tipo_movimiento` INT NOT NULL AUTO_INCREMENT,
`nombre_movimiento` VARCHAR(45) NOT NULL,
PRIMARY KEY (`tipo_movimiento`))
ENGINE = InnoDB
AUTO_INCREMENT = 4
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
-- -----------------------------------------------------
-- Table `banco_db`.`movimiento`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `banco_db`.`movimiento` (
`codigo_movimiento` INT NOT NULL AUTO_INCREMENT,
`Monto` INT NULL DEFAULT '0',
`fecha_hora_movimiento` VARCHAR(45) NULL DEFAULT NULL,
`numero_cuenta` INT NOT NULL,
`tipo_movimiento` INT NOT NULL,
PRIMARY KEY (`codigo_movimiento`),
CONSTRAINT `fk_numerocuenta_numerocuenta`
FOREIGN KEY (`numero_cuenta`)
REFERENCES `banco_db`.`cuenta` (`numero_cuenta`),
CONSTRAINT `fk_tipomovimiento_tipomovimiento`
FOREIGN KEY (`tipo_movimiento`)
REFERENCES `banco_db`.`tipomovimiento` (`tipo_movimiento`))
ENGINE = InnoDB
AUTO_INCREMENT = 2
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
7
2. Socket server que identifica el tipo de transacción y ejecuta la operación sobre la
base de datos.
8
3. Socket Cliente que llama al socket server para crear un cliente + inserción de un
dato.
9
4. Agregar el código de cada operación y explicar que hace cada programa.
Con todo lo anterior, se estable una comunicación completa, donde hay un servidor, un
cliente y un canal de comunicación.
Para este código, usamos una copia del archivo de socket de cliente y cambiamos la
instrucción sql dentro del bloque “try” que ejecuta las sentencias de SQL como se muestra
a continuación:
try {
Connection conexion
=DriverManager.getConnection(url,”root”,”admin”);
Statement instruccion = conexion.createStatement();
String sql=”SELECT saldo_cuenta FROM cuenta WHERE numero_cuenta =
1”;
ResultSet saldo=instrucción.executeQuery(sql);
double retiro=500.0;
if(saldo>=retiro){
instruccion.executeQuery(nmovimiento);
System.out.println(“la transacción
completa”);
}
}
10
en este se hace una comparación entre el valor a retirar y el saldo en
la cuenta, si el saldo de la cuenta es mayor, se procede a ejecutar las
sentencias que agregan el retiro a la tabla movimientos y el UPDATE
para actualizar el nuevo saldo para la cuenta.
De la misma manera, generamos una nueva copia del socket de cliente para hacer la
consulta SELECT modificando únicamente el bloque “try” que ejecuta las sentencias de
SQL:
try {
Connection conexion
=DriverManager.getConnection(url,”root”,”admin”);
Statement instruccion = conexion.createStatement();
String sql=”SELECT * FROM movimiento WHERE numero_cuenta = 1”;
ResultSet movimientos=instrucción.executeQuery(sql);
System.out.println(movimientos);
}
package datos;
import entidad.Cliente;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
11
import java.sql.SQLException;
import java.sql.Statement;
ServerSocket server;
java.net.Socket socket;
int puerto = 9000;
DataOutputStream salida;
BufferedReader entrada;
Cliente cliente;
ClienteJDBC nuevocliente = new ClienteJDBC();
try {
server = new ServerSocket(puerto);
12
socket = new java.net.Socket();
socket = server.accept();
entrada = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
salida = new DataOutputStream(socket.getOutputStream());
13
cliente = new Cliente(direccion,dni,nombre,apellido,ciudad,telefono);
nuevocliente.insert(cliente);
socket.close();
} catch (Exception e) {}
};
14
Lista de referencias Bibliográficas
https://www.ejemplode.com/22-mysql/13-ejemplo_de_base_de_datos_en_mysql.html
https://programacion.net/articulo/integridad_referencial_en_mysql_263/4
https://rico-schmidt.name/pymotw-3/persistence.html
https://uniwebsidad.com/libros/algoritmos-python/capitulo-11/persistencia-de-datos
https://topicdb.wordpress.com/2-5-persistencia-concur-rencia-y-recuperacion-en-bdoo-3/
15