lunes, 18 de diciembre de 2023
Generar numero aleatorio entre un rango especifico en JAVA
Generar número entero aleatorio entre un rango especifico:
int numeroAleatorio = (int) (Math.random() * (max - min + 1)) + min;
Generar número decimal aleatorio entre un rango especifico:
double numeroAleatorio = Math.random() * (max - min) + min;
miércoles, 6 de diciembre de 2023
Enum en java
ENUM
======
Un enum es una coleccion de valores constantes.
Un enum es una coleccion de valores constantes.
public enum Color {
RED("rojo"),
GREEN("verde"),
YELLOW("amarillo");
private final String color;
Color(String color) {
this.color = color;
}
public String getColor() {
return color;
}
}
public class Main {
public static void main(String[] args) {
Color red = Color.RED;
System.out.println(red.getColor()); //rojo
}
}
lunes, 4 de diciembre de 2023
Instalar Typescript
Instalar typescript
$> npm install -g typescript
Obtener version de typescript
$> tsc --version
$> npm install -g typescript
Obtener version de typescript
$> tsc --version
Configuracion del archivo tsconfig.json
$> tsc -init
"rootDir": "./src",
"outDir": "./dist",
"noEmitOnError": false,
"removeComments":true,
Crear carpeta src y poner el archivo index.ts
en la terminal ejecutar :
$> tsc
Con el comando se generara el codigo javascript en la carpeta dist.
Compilar todos los archivos que se encuentran en la carpeta src
$> tsc --watch
jueves, 30 de noviembre de 2023
JAVAFX
JavaFX
======
Stage: Representa la ventana principal de la aplicacion
Se pueden crear nuevas instancias de la clase Stage que representan nuevas ventanas.
Scene: Es el que contiene todos los elementos que se encuentran en en Stage.
Node: Son todos los componentes individuales como botones,tablas, etc.
Stage: Representa la ventana principal de la aplicacion
Se pueden crear nuevas instancias de la clase Stage que representan nuevas ventanas.
Scene: Es el que contiene todos los elementos que se encuentran en en Stage.
Node: Son todos los componentes individuales como botones,tablas, etc.
miércoles, 29 de noviembre de 2023
JAVAFX INSTALACION
JavaFX
=========
Descargar SceneBuilder
https://gluonhq.com/products/scene-builder/
Ruta por defecto de SceneBuilder
C:\Users\userPC\AppData\Local\SceneBuilder\
=========
Descargar SceneBuilder
https://gluonhq.com/products/scene-builder/
Ruta por defecto de SceneBuilder
C:\Users\userPC\AppData\Local\SceneBuilder\
Configurar Scene builder en intellij idea
En Intellij idea > Ir a Settings
buscar JavaFX
Se le asigna la siguiente ruta:
C:\Users\UserName\AppData\Local\SceneBuilder\SceneBuilder.exe
Descargar el sdk de JavaFX para jdk 11 y versiones posteriores
https://openjfx.io/
Descomprimir y copiar la carpeta en el Disco C junto al jdk de java.
Añadir el SDK de JavaFX como libreria.
Ir a Project Structure > libraries > Add
C:\Program Files\Eclipse Adoptium\javafx-sdk-21.0.1\lib
Agregar opciones a la VM.
Ir a la Clase Main > Alt + Enter > modify Run Configuration
Clic en Modify options > Add VM options > En VM options agregar:
-----------------------------------------------------------------------------------------------------
--module-path "C:\Program Files\Eclipse Adoptium\javafx-sdk-21.0.1\lib" --add-modules javafx.controls,javafx.fxml
-----------------------------------------------------------------------------------------------------
domingo, 26 de noviembre de 2023
Verificar si el form esta abierto (instancia única) WINDOWS FORM MDI
private void OpenChildForm(Form childForm)
{
foreach (Form form in MdiChildren)
{
if (form.GetType() == childForm.GetType())
{
form.BringToFront();
if (form.WindowState == FormWindowState.Minimized)
{
form.WindowState = FormWindowState.Normal;
}
return;
}
}
}
childForm.MdiParent = this;
childForm.Show();
}
childForm.Show();
}
martes, 17 de octubre de 2023
Conexion a la base de datos con SQL SERVER en C#
Descargar e Instalar:
Microsoft.Data.SqlClient
System.Configuration.ConfigurationManager
En el App.config del proyecto principal:
Configuramos la cadena de conexión para SQL SERVER
<connectionStrings>
<add name="SqlCn" connectionString="Data Source=TI\MSSQLSERVER2022;Initial Catalog=salesdb;Integrated Security=True" />
<add name="SqlCn" connectionString="Data Source=TI\MSSQLSERVER2022;Initial Catalog=salesdb;Integrated Security=True" />
</connectionStrings>
ó
<connectionStrings> <add name="SqlServerCn" connectionString="Server=TI;Database=testdb;uid=sa;pwd=123456";Encrypt=False />
</connectionStrings>
Otra Forma:
string cadena = @"server = TI\MSSQLSERVER;database = Negocios2022;Trusted_Connection = True;MultipleActiveResultSets = True;TrustServerCertificate = False;Encrypt = False";
En el código C#
Creamos la clase Connection o Database
------------------------------------------------------------------------------
public class Connection
{
private static Connection instance;
private Connection() { }
public static Connection GetInstance()
{
if (instance == null)
{
instance = new Connection();
}
return instance;
}
public SqlConnection GetConnection()
{
string connectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
return new SqlConnection(connectionString);
}
}
---------------------------------------------------------------------------------------------------------------
public class Connection
{
private static Connection instance;
private static readonly object _lock = new object();
private Connection() { }
public static Connection GetInstance()
{
if (instance == null)
{
lock (_lock)
{
if(instance == null)
{
instance = new Connection();
}
}
}
return instance;
}
public SqlConnection GetConnection()
{
string connectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
return new SqlConnection(connectionString);
}
}
-----------------------------------------------------------------------------------------------------------------
Validar la conexion a la base de datos en C# Windows Form
private void btnConnection_Click(object sender, EventArgs e)
{
try
{
Database database = new Database();
using (SqlConnection conn = database.GetConnection())
{
conn.Open();
MessageBox.Show("Conexión exitosa");
}
}
catch (Exception ex)
{
MessageBox.Show("Conexión fallida: " + ex.Message);
}
}
lunes, 16 de octubre de 2023
Patrones de Diseño
Patrones de Diseño
=================
Patrón Singleton: El patrón singleton permite tener una única instancia de una clase para que sea utilizado durante toda la aplicación.
Ejemplo:
public class Connection
{
private static Connection instance;
private Connection() { }
public static Connection GetInstance()
{
if (instance == null)
{
instance = new Connection();
}
return instance;
}
public SqlConnection GetConnection()
{
string connectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
return new SqlConnection(connectionString);
}
}
//Connection obj = Connection.GetInstance();
sábado, 30 de septiembre de 2023
Descargar Instalador de Microsoft Office 365
Descargar Instalador de Microsoft Office 365
https://acortar.link/7jE9mo
viernes, 29 de septiembre de 2023
Obtener la clave de tu licencia de windows 11
Obtener la clave de tu licencia de windows 11
Ejecutar como administrador la consola de windows
Ejecutar el siguiente comando:
$> wmic path softwarelicensingservice get OA3xOriginalProductKey
jueves, 10 de agosto de 2023
MAPSTRUCT JAVA 17
Dependencias de MapStruct y Lombok con MAVEN
Configuración de pom.xml:
==========================
<properties>
<!-- ... -->
<org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
<org.projectlombok.version>1.18.30</org.projectlombok.version>
<lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
</properties>
<dependencies>
<!-- ... -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependencies>
<!-- ... -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
</dependencies>
<build>
<build>
<plugins>
<plugin>
<!-- ... -->
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source>
<target>17</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>${lombok-mapstruct-binding.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
martes, 8 de agosto de 2023
Thymeleaf
Thymeleaf
=========
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
<version>3.0.4.RELEASE</version>
</dependency>
=========
Para usar el formato Fecha de tipo LocalDate en la vista, se debe agregar la siguiente dependencia en el archivo pom.xml :
<dependency><groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
<version>3.0.4.RELEASE</version>
</dependency>
En el controller para pasar una fecha de tipo LocalDate a la vista se debe realizar lo siguiente:
model.addAttribute("currentDate", LocalDate.now());
En la vista aplicamos el formato de fecha de tipo LocalDate.
<body>
<h1 th:text="'Hoy es ' + ${#temporals.format(currentDate,'dd/MM/yyyy')}"></h1>
<h2 th:text="'Hoy es ' + ${#dates.format(fecha,'dd/MM/yyyy')}"></h2> //Fecha Date
</body>
lunes, 24 de julio de 2023
Agregar JSTL como dependencia de Maven
Agregar JSTL como dependencia de Maven
====================================
Para JDK 17
-------------------
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>3.0.1</version>
</dependency>
Hasta JDK 11
------------
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
Importar las etiquetas JSTL en el JSP
=============================
Colocar al inicio de cada archivo JSP:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
domingo, 23 de julio de 2023
Instalar Sass
Instalar Sass
======================
Descargar e instalar Sass https://sass-lang.com/
$> npm init -y
$> npm install -g sass
En el archivo package.json agregar en el script:
{
.
.
"script": {
"test": "echo \"Error: no test specified\" && exit 1",
"sass": "sass --watch --style=compressed sass/index.scss public/bundle.css",
"build": "rollup --watch --config"
},
}
Ejecutar:
$> npm run sass
Validar la creación del archivo bundle.css en la carpeta public.
Vincular el archivo final bundle.css en el index.html
<link rel="stylesheet" href="./public/bundle.css" />
======================
Descargar e instalar Sass https://sass-lang.com/
$> npm init -y
$> npm install -g sass
En el archivo package.json agregar en el script:
{
.
.
"script": {
"test": "echo \"Error: no test specified\" && exit 1",
"sass": "sass --watch --style=compressed sass/index.scss public/bundle.css",
"build": "rollup --watch --config"
},
}
Ejecutar:
$> npm run sass
Validar la creación del archivo bundle.css en la carpeta public.
Vincular el archivo final bundle.css en el index.html
<link rel="stylesheet" href="./public/bundle.css" />
Instalacion Rollup
Instalación Rollup
====================
$> npm init -y
$> npm install rollup --save-dev
Crear archivo en la raíz del proyecto
rollup.config.js agregar el siguiente código:
export default {
input: 'src/index.js',
output: {
file: 'public/bundle.js',
format: 'cjs'
}
};
En la raíz Crear carpeta src y crear el archivo index.js
En la raíz Crear carpeta public
En el archivo package.json agregar al inicio y en el script:
{
"type" : "module",
.
.
"script": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "rollup --watch --config"
},
}
Ejecutar:
$> npx rollup
$> npm run build
Validar la creación del archivo bundle.js en la carpeta public.
Vincular el archivo final bundle.js en el index.html
<script defer src="./public/bundle.js"></script>
lunes, 15 de mayo de 2023
Procedimientos Almacenados MYSQL
Procedimientos Almacenados MYSQL
===============================
-- Procedimiento Listar
DELIMITER $$
-- Procedimiento Listar
DELIMITER $$
CREATE PROCEDURE sp_getAllCategories()
BEGIN
SELECT id,descripcion,estado
FROM category
ORDER BY id DESC;
END $$
DELIMITER ;
call sp_getAllCategories();
-- Procedimiento Buscar
delimiter $$
create procedure sp_findCategory(in text varchar(50))
begin
select name,description
from category
where upper(trim(name)) or upper(trim(description)) like concat('%',upper(trim(text)),'%') and active=1
create procedure sp_findCategory(in text varchar(50))
begin
select name,description
from category
where upper(trim(name)) or upper(trim(description)) like concat('%',upper(trim(text)),'%') and active=1
order by name asc;
end $$
delimiter ;
delimiter $$
create procedure sp_findAllCategories()
begin
select id,name,description,active
from category
order by name asc;
end $$
delimiter ;
delimiter $$
create procedure sp_insertCategory(in opt int,
in id int,
in name varchar(50),
in description varchar(255),
in active int)
begin
if(opt=1) then
insert into category(name,descripcion)
values(name, description);
else
update category set name=name, description=description
where id=id;
end if;
end$$
delimiter ;
CALL sp_insertCategory(1,1,'bebidas','bebida inkcola', 1);
-- Procedimiento Eliminar
DELIMITER $$
CREATE PROCEDURE sp_deleteCategory(IN categoryId INT)
BEGIN
DELETE
FROM category
WHERE id = categoryId;
END $$
DELIMITER ;
CALL sp_deleteCategory(2);
domingo, 9 de abril de 2023
Herencia y polimorfismo en C#
Herencia y polimorfismo
=====================
1.
1.
public class Person
{
private string name { get; set; }
private string lastname { get; set; }
private int age { get; set; }
public Person(string name, string lastname, int age)
{
this.name = name;
this.lastname = lastname;
this.age = age;
}
public virtual string ShowData()
{
return name + "\n" + lastname + "\n" + age;
}
}
public class Student : Person
{
public int code { get; set; }
public double finalNote { get; set; }
public Student(string name, string lastname, int age, int code, double finalNote) : base(name, lastname, age)
{
this.code = code;
this.finalNote = finalNote;
}
public override string ShowData()
{
return base.showData() + "\n" + code + "\n" + finalNote;
}
}
public class Program
{
static void Main(string[] args)
{
Student obj = new Student("David", "Perez", 23, 666, 18);
Console.WriteLine(obj.showData());
Console.ReadLine();
}
}
2. La empresa ABC, desea implementar una aplicación orientada a objetos, para registrar los trabajadores, los cuales están conformados por: Empleados, Vendedores, Directores y Practicantes.
La clase Trabajador (Padre) cuenta con los siguientes atributos:
DNI, NOMBRE, APELLIDO, FECHA INGRESO y CARGO.
Esta clase se definen los siguientes métodos:
Básico:
cargo es Administrativo, sueldo básico es 4500.
cargo es Auxiliar, sueldo básico es 1800.
cargo es Seguridad, sueldo básico es 2500.
Deducción: el cual representa el 5% de su Sueldo Básico.
Neto que es la diferencia entre básico y Deducción.
____
A partir de la clase Trabajador, creamos la clase heredada Empleado, la cual hereda todos los atributos y métodos del padre.
Para esta clase el método bonificación se calcula:
si el cargo es Administrativo o Seguridad, representa el 5% del básico, si es Auxiliar es el 10% del básico.
La Deducción representara el 10% de la suma de básico y bonificación
El neto es Básico más bonificación menos la Deducción
Defina las clases
Dibuja la GUI para el hijo Director
Programa el botón, instancia la clase, ingresa los datos y visualiza los resultados.
Solucion:
public class Worker
{
public string dni { get; set; }
public string name { get; set; }
public string lastname { get; set; }
public DateTime admissionDate { get; set; }
public string position { get; set; }
public double Basic()
{
double basicSalary = 0.0;
switch (position)
{
case "Administrativo":
basicSalary = 4500;
break;
case "Auxiliar":
basicSalary = 1800;
break;
case "Seguridad":
basicSalary = 2500;
break;
default:
break;
}
return basicSalary;
}
public virtual double Deduction()
{
return 0.05 * Basic();
}
public virtual double Net()
{
return Basic() - Deduction();
}
}
public class Employee : Worker
{
public double Bonus()
{
double bonus = 0;
if (position == "Administrativo" || position == "Seguridad")
{
bonus = 0.05 * Basic();
}
else if (position == "Auxiliar")
{
bonus = 0.1 * Basic();
}
return bonus;
}
public override double Deduction()
{
return 0.1 * (Basic() + Bonus());
}
public override double Net()
{
return (Basic() + Bonus()) - Deduction();
}
}
Button:
Employee obj = new Employee();
obj.dni = txtDni.Text;
obj.name = txtName.Text;
obj.lastname = txtLastname.Text;
obj.admissionDate = dtAdmissionDate.Value;
obj.position = cboPosition.Text;
dgEmployee.Rows.Add(obj.dni, obj.name, obj.lastname, obj.admissionDate, obj.position, obj.Basic(), obj.Deduction(), obj.Net());
jueves, 6 de abril de 2023
Atajos de Teclado Eclipse
Atajos de Teclado Eclipse
==========================
Auto Import: Ctrl + Shift + O
Formatear Codigo: Ctrl + Alt + L
==========================
Auto Import: Ctrl + Shift + O
Formatear Codigo: Ctrl + Alt + L
sábado, 1 de abril de 2023
Conexion a la base de datos con MYSQL en JAVA
Conexión a la base de datos con MYSQL en JAVA
========================================
public class ConexionDB {
========================================
public class ConexionDB {
private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DB = "dbtest";
private static final String URL = "jdbc:mysql://localhost:3306/";
private static final String USER = "root";
private static final String PASSWORD = "";
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL + DB, USER, PASSWORD);
private static final String DB = "dbtest";
private static final String URL = "jdbc:mysql://localhost:3306/";
private static final String USER = "root";
private static final String PASSWORD = "";
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL + DB, USER, PASSWORD);
System.out.println("Successful Connection! ");
} catch (ClassNotFoundException e) {
System.out.println("Driver not found for database");
} catch (SQLException e) {
System.out.println("Failed Connection!" + e.getMessage());
System.out.println("Driver not found for database");
} catch (SQLException e) {
System.out.println("Failed Connection!" + e.getMessage());
}
return conn;
}
}
return conn;
}
}
viernes, 24 de marzo de 2023
Celdas de JTable no editables
Celdas de JTable no editables
==============================
Click derecho en el JTable -> Customize Code...
Agregar despues de la primera linea de codigo lo siguiente:
tblProducts.setFocusable(false);
tblProducts = new javax.swing.JTable() {
public boolean isCellEditable(int rowIndex,int colIndex){
return false;
}
};
==============================
Click derecho en el JTable -> Customize Code...
Agregar despues de la primera linea de codigo lo siguiente:
tblProducts.setFocusable(false);
tblProducts = new javax.swing.JTable() {
public boolean isCellEditable(int rowIndex,int colIndex){
return false;
}
};
martes, 28 de febrero de 2023
Laragon
-------------------------------------
Dominio Virtual Laragon
Ir a Menu Laragon -> Apache -> sites-enabled -> auto.XXX.test.conf
------------------------------------------------------------------------------
Crear archivo info.php en D:\php\projects
<?php
phpinfo();
?>
Ingresar al navegador a http://localhost/info.php
Copiar todo el contenido de info.php y pegar https://xdebug.org/wizard
Descargar php_xdebug-3.2.0-8.2-vs16-x86_64.dll
Copiar el archivo descargado en C:\laragon\bin\php\php-8.2.3-Win32-vs16-x64\ext
Editar el archivo php.ini y añadir al final
C:\laragon\bin\php\php-8.2.3-Win32-vs16-x64\php.ini
[xdebug]
xdebug.mode = develop,debug
xdebug.start_with_request=yes
xdebug.idekey=VSCODE
zend_extension = "C:\laragon\bin\php\php-8.2.3-Win32-vs16-x64\ext\php_xdebug-3.2.0-8.2-vs16-x86_64.dll"
Reiniciar Apache
Dominio Virtual Laragon
-------------------------------------
Ir a Menu Laragon -> Apache -> sites-enabled -> auto.XXX.test.conf
Editar Archivo
DocumentRoot "D:/php/site1/public"
------------------------------------------------------------------------------
Configurar var_dump en PHP con colores y ordenado------------------------------------------------------------------------------
Crear archivo info.php en D:\php\projects
<?php
phpinfo();
?>
Ingresar al navegador a http://localhost/info.php
Copiar todo el contenido de info.php y pegar https://xdebug.org/wizard
Descargar php_xdebug-3.2.0-8.2-vs16-x86_64.dll
Copiar el archivo descargado en C:\laragon\bin\php\php-8.2.3-Win32-vs16-x64\ext
Editar el archivo php.ini y añadir al final
C:\laragon\bin\php\php-8.2.3-Win32-vs16-x64\php.ini
[xdebug]
xdebug.mode = develop,debug
xdebug.start_with_request=yes
xdebug.idekey=VSCODE
zend_extension = "C:\laragon\bin\php\php-8.2.3-Win32-vs16-x64\ext\php_xdebug-3.2.0-8.2-vs16-x86_64.dll"
Reiniciar Apache
Escribir el siguiente código:
Ingresar al navegador web y verificar
http://localhost/prueba.php
<?php
$arr = ["Lunes","Miercoles","Sabado"];
var_dump($arr);
http://localhost/prueba.php
jueves, 26 de enero de 2023
Gestionar multiples versiones de JAVA CON JEnv
Gestionar multiples versiones de JAVA CON JEnv
===============================================
Clonar Repositorio con la terminal de Git Bash
$> mkdir /c/'Program Files'/JEnv
$> cd /c/'Program Files'/JEnv
$> git clone https://github.com/FelixSelter/JEnv-for-Windows.git
$> cd JEnv-for-Windows
Configurar variables de entorno
Otra Forma:
===============================================
Clonar Repositorio con la terminal de Git Bash
$> mkdir /c/'Program Files'/JEnv
$> cd /c/'Program Files'/JEnv
$> git clone https://github.com/FelixSelter/JEnv-for-Windows.git
$> cd JEnv-for-Windows
Configurar variables de entorno
Variables de Usuario -> path -> New : C:\Program Files\JEnv\JEnv-for-Windows
path -> New : C:\Program Files\Java\Amazon Corretto\jdk11.0.18_10\bin
Agregar JAVA_HOME -> New : C:\Program Files\Java\Amazon Corretto\jdk11.0.18_10
Otra Forma:
Desde Consola de windows, Agregar la ruta:
$> [Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";C:\Program Files\JEnv\JEnv-for-Windows", "User")
Reiniciar equipo
Reiniciar equipo
Desde la consola de windows Ejecutar:
$> jenv
Añadir JDK
$> jenv add jdk-11.0.18.10 "C:\Program Files\Java\Amazon Corretto\jdk11.0.18_10"
$> jenv list
Establecer Versión Global de Java JDK
$> jenv use jdk-11.0.18.10
$> jenv
Añadir JDK
$> jenv add jdk-11.0.18.10 "C:\Program Files\Java\Amazon Corretto\jdk11.0.18_10"
$> jenv list
Establecer Versión Global de Java JDK
$> jenv use jdk-11.0.18.10
$> java -version
Cambiar de Versión de Java
$> jenv change jdk-17.0.6.10
Cambiar de Versión de Java
$> jenv change jdk-17.0.6.10
Remover JDK de la lista JEnv
$> jenv remove jdk-7
$> jenv remove jdk-7
lunes, 23 de enero de 2023
POSTGRESQL
POSTGRESQL
==============Crear Usuario Postgresql
====================
Desde la consola:
Ingresar con el usuario postgres
$> psql -U postgres -h localhost -W
CREAR USUARIO
$> CREATE ROLE nameUser WITH SUPERUSER PASSWORD 'password'
Crear una base de datos con un usuario específico como propietario
$> CREATE DATABASE nameDatabase WITH OWNER nameUser;
$> GRANT ALL PRIVILEGES ON DATABASE nameDatabase TO nameUser;
====================
Desde la consola:
Ingresar con el usuario postgres
$> psql -U postgres -h localhost -W
CREAR USUARIO
$> CREATE ROLE nameUser WITH SUPERUSER PASSWORD 'password'
Crear una base de datos con un usuario específico como propietario
$> CREATE DATABASE nameDatabase WITH OWNER nameUser;
$> GRANT ALL PRIVILEGES ON DATABASE nameDatabase TO nameUser;
Para ver la estructura de una tabla tenemos que ejecutar la siguiente consulta:
$> select column_name, data_type, is_nullable, character_maximum_length, column_default from INFORMATION_SCHEMA.COLUMNS where table_name = 'posts';
$> select column_name, data_type, is_nullable, character_maximum_length, column_default from INFORMATION_SCHEMA.COLUMNS where table_name = 'posts';
Crear Tabla en POSTGRESQL
==================================
CREATE TABLE post(
id BIGINT PRIMARY KEY NOT NULL,
title VARCHAR(50) NOT NULL UNIQUE,
description VARCHAR(150) NOT NULL,
content VARCHAR(255) NOT NULL,
status CHAR(1) DEFAULT '1' NOT NULL
);
CREATE SEQUENCE seq_post START 1;
INSERT INTO post(id,title,description,content) VALUES(nextval('seq_post'),'My New first Post','First Post description','This is my new first post');
INSERT INTO post(id,title,description,content) VALUES(nextval('seq_post'),'My second Post','Second Post description','This is my new second post');
UPDATE post
set description='FOURTH POST DESCRIPTION'
WHERE id=2;
domingo, 22 de enero de 2023
Plantilla THYMELEAF
<!DOCTYPE html>
<html lang="es" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>
sábado, 21 de enero de 2023
Anotaciones de JPA
Anotaciones de JPA
================
@Entity
@Table
@Id
@Column
@GeneratedValue
@Enumerated
@Temporal
@Transient
@OneToMany
@ManyToOne
@OneToOne
@ManyToMany
================
@Entity
@Table
@Id
@Column
@GeneratedValue
@Enumerated
@Temporal
@Transient
@OneToMany
@ManyToOne
@OneToOne
@ManyToMany
jueves, 19 de enero de 2023
Configuración de Entity Framework Core
Configuración de Entity Framework Core
=================================
Instalar Microsoft.EntityFrameworkCore
Instalar Microsoft.EntityFrameworkCore.SqlServer
Instalar Microsoft.EntityFrameworkCore.Tools
Instalar Microsoft.EntityFrameworkCore.Tools
//Crear Cadena de conexión
"ConnectionStrings": {
"ConexionSQL": "Server=TI;Database=demoDB;Integrated Security=True;TrustServerCertificate=True"
},
//Configuracion de la conexion SQL Server
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("ConexionSQL"))
);
Crear migracion
$> add-migration CreacionTablaCategoriaBD
Ejecutar migracion
$> update-database
martes, 17 de enero de 2023
LinQ Sintaxis de Metodos C#
LinQ Sintaxis de Metodos
=====================
1. int[] numeros = { 2, 3, 5, 6, 7, 8, 9, 10,12,14,15,16 };
Del arreglo muestre los números pares y que sean mayores a 10.
Solucion:
1. int[] numeros = { 2, 3, 5, 6, 7, 8, 9, 10,12,14,15,16 };
Del arreglo muestre los números pares y que sean mayores a 10.
Solucion:
List<int> consulta = numeros.Where(n => n % 2 == 0 && n>10).ToList();
foreach (int c in consulta)
Console.WriteLine(c); // 12 14 16
2. Se tiene una lista de objetos de tipo persona, crear la clase Persona con las siguientes propiedades: Nombre, Edad, FechaIngresoEmpresa, Soltero.
List<Persona> personas = new List<Persona>()
{
new Persona {Nombre = "Eduardo",Edad=30,FechaIngresoEmpresa = new DateTime(2021,1,2),Soltero=true},
new Persona {Nombre = "Nidia",Edad=19,FechaIngresoEmpresa = new DateTime(2015,11,12),Soltero=true},
new Persona {Nombre = "Alejandro",Edad=45,FechaIngresoEmpresa = new DateTime(2020,4,12),Soltero=false},
new Persona {Nombre = "Valentina",Edad=24,FechaIngresoEmpresa = new DateTime(2021,7,8),Soltero=false},
new Persona {Nombre = "Roberto",Edad=61,FechaIngresoEmpresa = DateTime.Now.AddDays(-1),Soltero=false}
};
a) Listar el nombre y la edad de las personas menores o iguales de 25.
b) Listar el nombre de las personas que son solteras.
c) Listar el nombre y la edad de las personas que son solteras y menores o iguales de 25.
d) Listar el nombre de las personas con menos de 3 meses en la empresa.
e) Listar el nombre y la edad de las personas ordenadas por su edad de manera ascendente.
f) Listar solo el nombre de las personas
g) Listar el nombre y la edad de las personas, ordenadas por el nombre de manera ascendente.
Solución:
a)
List<Persona> listPersons = personas.Where(p => p.Edad <= 25).ToList();
foreach (Persona p in listPersons)
Console.WriteLine($"{p.Nombre} {p.Edad}"); //Nidia
b)
List<Persona> listPersons = personas.Where(p => p.Soltero).ToList();
foreach (Persona p in listPersons)
Console.WriteLine($"{p.Nombre}");
c)
List<Persona> listPersons = personas.Where(p => p.Soltero && p.Edad<=25).ToList();
foreach (Persona p in listPersons)
Console.WriteLine($"{p.Nombre} {p.Edad}");
d)
List<Persona> listPersons = personas.Where(p => p.FechaIngreso>=DateTime.Today.AddMonths(-3)).ToList();
foreach (Persona p in listPersons)
Console.WriteLine($"{p.Nombre}");
e)
var result = personas.OrderBy(p=>p.Edad);
foreach (Persona p in result)
Console.WriteLine($"{p.Nombre} {p.Edad}");
f)
var result = personas.Select(p=>p.Nombre);
foreach (var nombre in result)
Console.WriteLine(nombre);
g)
var result = personas.OrderBy(p=>p.Nombre).Select(p=>new
{
Nombre = p.Nombre,
Edad = p.Edad
});
foreach (var p in result)
Console.WriteLine($"{p.Nombre} {p.Edad}");
3. Se tiene una lista de empleados, donde tiene 3 propiedades el IdEmpleado, Nombre y el IdModalidad.
List<Empleado> listaEmpleado = new List<Empleado>
{
new Empleado {IdEmpleado=1, Nombre="Pedro", IdModalidad=1},
new Empleado {IdEmpleado=2, Nombre="Maria", IdModalidad=2},
new Empleado {IdEmpleado=3, Nombre="Luis", IdModalidad=1},
new Empleado {IdEmpleado=4, Nombre="Andrea", IdModalidad=3}
};
Obtener una lista con los nombres de los empleados cuya IdModalidad es igual a 1.
Solución:
List<Empleado> listaEmpleado = new List<Empleado>
{
new Empleado {IdEmpleado=1, Nombre="Pedro", IdModalidad=1},
new Empleado {IdEmpleado=2, Nombre="Maria", IdModalidad=2},
new Empleado {IdEmpleado=3, Nombre="Luis", IdModalidad=1},
new Empleado {IdEmpleado=4, Nombre="Andrea", IdModalidad=3}
};
var result = listaEmpleado.Where(e => e.IdModalidad == 1).ToList();
foreach (var e in result)
{
Console.WriteLine($"{e.Nombre}"); // Pedro Luis
}
------------------------------------------------------------------------------------------------------------------
LINQ INNER JOIN
1. Dadas las siguientes 2 listas de objetos,
1. Dadas las siguientes 2 listas de objetos,
Crear la clase Empleado con las siguientes propiedades: IdEmpleado, Nombre y el IdModalidad
Crear la clase Modalidad Contrato con las siguientes propiedades: IdModalidad y el NombreM
List<Empleado> listaEmpleado = new List<Empleado>
{
new Empleado {IdEmpleado=1, Nombre="Pedro",IdModalidad=1},
new Empleado {IdEmpleado=2, Nombre="Jorge",IdModalidad=2},
new Empleado {IdEmpleado=3, Nombre="Luis",IdModalidad=1},
new Empleado {IdEmpleado=4, Nombre="Julio",IdModalidad=3},
};
List<ModalidadContrato> listaModalidad = new List<ModalidadContrato>
{
new ModalidadContrato {IdModalidad=1, NombreModalidad="CAS"},
new ModalidadContrato {IdModalidad=2, NombreModalidad="TEMPORAL"},
new ModalidadContrato {IdModalidad=3, NombreModalidad="INDEFINIDO"}
};
Mediante una consulta linq Imprimir el siguiente resultado:
El empleado "nombre empleado" y el "nombre modalidad".
Solución:
var consulta = listaModalidad.Join(
listaEmpleado,
m => m.IdModalidad,
e => e.IdModalidad,
(m, e) => new{NombreModalidad = m.NombreModalidad,NombreEmpleado = e.Nombre});
foreach (var c in consulta)
Console.WriteLine($"{c.NombreEmpleado} {c.NombreModalidad}");
2. Dadas las siguientes 3 listas de objetos,
Crear la clase Empleado con las siguientes propiedades: IdEmpleado, NombreEmpleado y el IdModalidad
Crear la clase ModalidadContrato con las siguientes propiedades: IdModalidad y el NombreM
Crear la clase Producto con las siguientes propiedades: IdProducto,NombreProducto, Id
List<Categoria> listaCategoria = new List<Categoria>
{
new Categoria{IdCategoria=1 , NombreCategoria="Fruta"},
new Categoria {IdCategoria=2 ,NombreCategoria="Verdura"}
};
List<Proveedor> listaProveedor = new List<Proveedor>
{
new Proveedor{IdProveedor=1 , NombreProveedor="ABC"},
new Proveedor {IdProveedor=2 , NombreProveedor="XYZ"}
};
List<Producto> listaProducto = new List<Producto>
{
new Producto{IdProducto=1 , NombreProducto="Fresa" , IdCategoria=1 , IdProveedor=2},
new Producto {IdProducto=2 , NombreProducto="Tomate" , IdCategoria=2 , IdProveedor=1}
};
Listar el nombre del producto, el nombre de la categoria y el nombre del proveedor.
Solucion:
var result = listaCategoria.Join(
listaProducto,
cat => cat.IdCategoria,
prod => prod.IdCategoria,
(cat, prod) => new { Categoria = cat, Producto = prod }
).Join(
listaProveedor,
prodcat => prodcat.Producto.IdProveedor,
prov => prov.IdProveedor,
(prodcat, prov) => new { ProductoCategoria = prodcat, Proveedor = prov }
);
foreach (var c in result)
Console.WriteLine($"{c.ProductoCategoria.Producto.NombreProducto} {c.ProductoCategoria.Categoria.NombreCategoria} {c.Proveedor.NombreProveedor}");
CONST Y ENUM EN C#
CONST Y ENUM EN C#
====================
Un enum es una coleccion de constantes.
No se pueden asignar valores de tipo cadena.
Se recomienda no asignar valores, solo mantener sus valores por defecto
Ejemplo ENUM:
public enum Meses
{
Enero = 1,
Febrero = 2,
Marzo = 3,
Abril = 4,
Mayo = 5,
Ejemplo ENUM:
public enum Meses
{
Enero = 1,
Febrero = 2,
Marzo = 3,
Abril = 4,
Mayo = 5,
Junio = 6,
Julio = 7,
Agosto = 8,
Setiembre = 9,
Octubre = 10,
Noviembre = 11,
Diciembre = 12
}
public class Program
{
public static int Main()
{
Meses mes = Meses.Enero;
Console.WriteLine((int)mes); //1
}
}
}
public class Program
{
public static int Main()
{
Meses mes = Meses.Enero;
Console.WriteLine((int)mes); //1
}
}
Ejemplo CONST:
public class TipoAfiliacion
{
public const double DescuentoAFP = 0.11;
public const double DescuentoSNP = 0.06;
public const double DescuentoESSALUD = 0.03;
}
public class Program
{
public static int Main()
{
double a = TipoAfiliacion.DescuentoAFP ;
double b = TipoAfiliacion.DescuentoAFP ;
double c = TipoAfiliacion.DescuentoAFP ;
Console.WriteLine(a); //0.11
Console.WriteLine(b); //0.06
Console.WriteLine(c); //0.03
}
}
lunes, 16 de enero de 2023
Migración a Spring boot 3 - JAVA 17
Migración a Spring boot 3 - JAVA 17
=============================
1. Cambiar versión de Spring boot version 3.0.x en pom.xml
2. Cambiar el nombre del paquete de javax a jakarta
3. Eliminar y crear nueva database
4. Insertar registros en las tablas
1. Cambiar versión de Spring boot version 3.0.x en pom.xml
2. Cambiar el nombre del paquete de javax a jakarta
3. Eliminar y crear nueva database
4. Insertar registros en las tablas
Restablecer el puerto 8080
Restablecer el puerto 8080
$> netstat -ano | findstr :8080
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 6804
$> taskkill /PID 6804 /F
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 6804
$> taskkill /PID 6804 /F
Suscribirse a:
Entradas (Atom)
Instalación y Configuración de un DNS Público en Debian 12
Configuración de un DNS Público en Debian 12 ===================================== Registrar un dominio público en Goddady, Namecheap ó pun...
-
1) ingrese 2 números enteros diferentes y visualizar el mayor de ellos. package problema1; import java.util.Scanner; public class Proble...
-
Atajos de Teclado Intellij-idea ========================= Formatear Codigo: Ctrl + Alt + L Comentar/Descomentar : ...
-
Descargar el instalador RPM $> wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm Instalar Google Chrome...